フォーム入力と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