LoginSignup
1
0

More than 5 years have passed since last update.

今更だけどRails4から実装されたStrongParameterをまとめてみる

Posted at

はじめに

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を参考にまとめました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0