ストロングパラメータとは
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”というパラメータが送付されてきても無視される。
本記事は、主にこちらの書籍で学習した内容のアウトプットです。
コメント