概要
なんとなくで終わらせないよう、しっかりStrong Parameters
について理解できるようしっかり手を動かす。
マスアサインメント機能とは
RailsにおけるDBの更新系処理で複数のカラムを一括で指定できる機能の事。
例えば
Person.new(name: 'nakamura', age: 29)
といったように複数のカラムを一気に保存できる。便利な機能。
マスアサインメントの脆弱性とは
マスアサインメントはハッシュ形式使用する。
例えばユーザーからのリクエストは params
変数に Hash
として保存されています。
この内容をそのままにマスアサインメント機能を利用して設定していた場合に、
想定していないカラムを更新されてしまう可能性があります。
例えばUserクラスに name, age, admin の3カラムがあり、
adminはユーザーの画面からは更新させない管理者権限だとします。
Userの新規登録処理で、以下のようなコードを書いていた場合、
user = User.new(params[:user])
user.save
悪意あるユーザーがrole
にadmin
という値を設定してリクエストを送ってきた場合(不正リクエスト)、意図せず管理者ユーザーを作られてしまう可能性がある。
それを防ぐためにストロングパラメータという機能がある。
Strong Parameters(ストロングパラメータ)とは
マスアサイメント脆弱性を回避するためにrails4以降に提供されるようになった機能
def create
@person = Person.new(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
def <Model名>_params
params.require(:<Model名>).permit(:<カラム名1>, :<カラム名2>)
end
上記のように
あらかじめ設定可能な値を明示的に宣言しておくことで脆弱性を回避できます。