6

このアプリケーションには、4 つの役割があります。

役割は、URL ID を編集して許可されていないページにアクセスし、そのページに関して利用可能なオプションでアクションを実行して、アプリケーションの誤動作を引き起こす可能性があります。

誰もがこれについて考えています。セッションを閉じる問題ですか、それともルートの許可の問題ですか...よろしくお願いします

4

1 に答える 1

1

ルートとは関係ありません。フィルターを使用してアクションへのアクセスを自分で制限できます。つまり、

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 セキュリティ ガイドを必ずお読みください。

于 2012-12-05T11:30:30.247 に答える