【Rails】ストロングパラメータとは何か

Ruby on Railsアイキャッチ画像

ストロングパラメータとは

Mass Assignment機能を利用する際に起こり得る脆弱性へ対応する手段の1つ。

Mass Assignment ?

Mass Assignmentとは

モデルの生成や更新の際に以下のようにハッシュを使って一括で属性を設定できる仕組みのことをいいます。

irb(main):001:8> attr = {name: "Almonta", category: "blog"}

どう使うのか?

例えば、、、

ストロングパラメータを設定しないと、管理者権限を乗っ取られてしまう可能性がある。

なぜそんなことが起きるのか?

パラメータは、HTTPリクエストを組み立てて送られるが、攻撃者がこのリクエストに”admin=true”というパラメータを送付してきたとする。

すると、Userテーブルにadminカラムが存在する場合は、このような不正なクエリにより乗っ取られてしまう。

これを防ぐのがストロングパラメータ!

Mass Assignmentで利用してもよいハッシュのキーを定義することでパラメータ制限をかけている。

ストロングパラメータを設定してない、攻撃者が不正なクエリを送付できてしまう例

class ProfileController < ApplicationController
  def update
    user = current_user
    user.update(params[:user])
  end
end

これにストロングパラメータを設定すると以下のようになる。

class ProfileController < ApplicationController
  def update
    user = current_user
    user.update(user_params)
  end

  private
  def user_params
    params.require(:user).permit(:name, :email)
  end
end

これにより、明示的に許可したキーである、nameとemailのみ利用されるようにする。

よって、”admin=true”というパラメータが送付されてきても無視される。

本記事は、主にこちらの書籍で学習した内容のアウトプットです。

コメント