はじめに
Rails3系からさすがに脱出しないとね、ということでRails3系とRails4系の違いについてよく調べる今日この頃。
そこで出てきたStrongParameterについて、なるほどと思ったのでまとめてみます。
Strong Parameterとは
MassAssignment機能を使う時に起こるかもしれない脆弱性に対する対策の1つ。
じゃあ、MassAssingmentとは?
これは、モデルの生成や更新の時にRubyのHashura酢を使って一括で属性を設定できる仕組み。
要は、更新する属性を書き換えた後にuser.save
ってするのではなく、user.update
を使って一括更新する方法のことを指すらしい。
複数の属性の設定をカンタンにかける一方で、意図しない属性の変更を一般のユーザができてしまうので、脆弱性につながる。
例えばこんなメソッドがあった時↓
def update
user = current_user
user.update(params[:user])
end
このパラメータに不正なユーザの名前やパスワード、メールアドレスなどを送付してきた場合、意図しないユーザのデータが上書きされてしまう。
これを防ぐためにStrong Parameterを使います。
Strong Parameterの使い方
いきなり例を書くとこんな感じで使う↓
def update
user = current_user
user.update(user_params)
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
このようにuser.updateの引数はparams[:user]ではなく、privateに設定したuser_paramsというメソッドの返り値を設定するようにする。
user_paramsメソッドの中では、まず、.require(:user)
で:userというkeyをもつもの確認し、.permit(:name, :email)
で更新をしてもいい属性を指定することができる
おわりに
まだ理解しきれていない部分が多いので、そのうち追記すると思います。
今回はパーフェクトRuby on Railsを参考にまとめました。