フォーム入力とpermit、StrongParametersについて

ソースコードレビューをしてたらpermitって見慣れない文字を見かけてgoogle先生に聞いてみた

そもそもStrongParametersの存在を知らなくて(恥ずかしい)

言い訳をすると現在のシステムで使っているRailsのバージョンが古く、レビューしたのはRails4.1のコードだったからです

元々Railsにはparamsがあるんですが、若干セキュリティ面で弱いそう(知らんかった・・・)

StrongParametersとparamsの違い

paramsの場合は予期しないデータくる場合があります

params # => { "name" => "名無しさん", "password" => "hoge", "admin" => "true" }
User.create(params) # => 新しいユーザーが管理者権限でで作成されてしまう

StrongParametersを使うことで、更新する値を制御することができます

上記のケースでは"admin"の項目は更新せずに、nameとpasswordのみ更新したいので

params.require(:user).permit(:name, :password)

こんな感じでuserモデルのnameとpasswordを更新してねって指定することができます

もともとはモデル内のattr_accessibleで制御する流れだったのですが

Rails4からはコントローラで制御するのが主流になりそうです

参考にしたサイト

とても分かりやすく詳しくかかれていました

http://ruby-rails.hatenadiary.com/entry/20141126/1417012848

QAサイトで実際のぜい弱性の例なんかもあります https://teratail.com/questions/30734