🐷
ストロングパラメータの重要性
ストロングパラメータって実はよく分かってない人多いかも?
ストロングパラメータってなんとなく使ってたり、「とりあえずpermit書いとけ」みたいなノリでやってる人、実は結構多いんじゃないでしょうか。
正直、僕も最初は「チュートリアルに出てきたから真似してるだけ」って感じでした。
今回は、なんでストロングパラメータが必要なのか?
もしなかったらどう困るのか?
Rails初心者の僕なりに、分かりやすくまとめてみます。
そもそもストロングパラメータって何?
Railsでform作ってて、controllerにこんなやつ↓
params.require(:user).permit(:name, :email)
これ、とりあえず書いてる人、絶対多いはず。
でも、本当の意味とか、何が守られてるのか
わかってないと大変なことになります
実はF12で値を好き放題いじれる
ブラウザのF12キー(開発者ツール)で
inputの値とか、hidden項目とか、なんでも書き換えられちゃいます。
例えば、本来フォームに出してないはずの
is_admin ってカラムがもし送信できちゃうと
<input type="hidden" name="user[is_admin]" value="false" />
これを
<input type="hidden" name="user[is_admin]" value="true" />
にしちゃって送信したら、そのまま管理者アカウントになっちゃうとか普通に起きます。
ストロングパラメータがないと、どうなるか?
もしストロングパラメータを書かずに
@user.update(params[:user])
みたいに paramsを全部丸ごとモデルに渡してたら
hiddenや書き換えた値もそのままDBに保存される。
= つまり 「誰でも管理者化できるし、全部やりたい放題」 ってことなんです
ストロングパラメータで守る
def user_params
params.require(:user).permit(:name, :email)
end
みたいに書くことで、
nameとemailだけしか通さない!
他は全部捨てる!
という「サーバー側の門番」になってるんです
まとめ
- Railsで受け取るパラメータは、絶対に信用しちゃダメ
- F12(開発者ツール)で、なんでも書き換え放題だから
- ストロングパラメータで「通していい値だけ」許可するのが超大事
- なんとなくpermitしてるだけだと、普通に事故る
Discussion