このアプリケーションには、4 つの役割があります。
役割は、URL ID を編集して許可されていないページにアクセスし、そのページに関して利用可能なオプションでアクションを実行して、アプリケーションの誤動作を引き起こす可能性があります。
誰もがこれについて考えています。セッションを閉じる問題ですか、それともルートの許可の問題ですか...よろしくお願いします
このアプリケーションには、4 つの役割があります。
役割は、URL ID を編集して許可されていないページにアクセスし、そのページに関して利用可能なオプションでアクションを実行して、アプリケーションの誤動作を引き起こす可能性があります。
誰もがこれについて考えています。セッションを閉じる問題ですか、それともルートの許可の問題ですか...よろしくお願いします
ルートとは関係ありません。フィルターを使用してアクションへのアクセスを自分で制限できます。つまり、
class MyController < ApplicationController
before_filter :check_access
def secure_action_a
end
def secure_action_b
end
private
def check_access
case params[:action]
when 'secure_action_a':
redirect_to root_path, error: "Not Allowed" unless current_user.role == 'admin'
when 'secure_action_b':
redirect_to root_path, error: "Not Allowed" unless current_user.role == 'user'
end
end
end
アクションでも、ユーザーがリソースにアクセスできることを確認する必要があります。たとえば、ユーザーにトランザクションを表示するアクションがあり、次のようなコードを記述した場合、ユーザーは自分のトランザクションのみを表示できるとします。
def transaction
@transaction = Transaction.find(params[:id])
end
現在のユーザーにはフィルターがないため、誰でも「http://mywebsite.com/transaction/23」のようなリクエストを書き始めてトランザクションを見ることができるため、大きな問題が発生します。リソースを所有しています
def transaction
@transaction = current_user.transactions.find(params[:id])
end
またはどちらか
def transaction
@transaction = Transaction.where(user_id: current_user.id, id: params[:id])
end
後でcancanのような高度な gem を使用して、リソースへのアクセスを制御できます。
最後に、 Rails セキュリティ ガイドを必ずお読みください。