StrongParameterとは
Web画面上から入力された値を安全に受け取る仕組みです。
ストロングパラメータを実装する目的は、Webブラウザ上で意図的にパラメーターを書き換えられた際に、エラーとして弾くことができるようにするためです。
このように、書き換えられたくないカラムが書き換えられてしまうことをマスアサインメント脆弱性といいます。
要するにストロングパラメータは、このマスアサインメント脆弱性の対策です。
使用例
def create
Sample.create(params[:sample])
redirect_to new_sample_path
end
create(params[:sample])とすることで、sampleテーブルのカラム情報をまとめて渡すことができます。
これをマスアサインメントといいます。
しかし、このやり方にはセキュリティ上の問題があります。params[:sample]は、「sampleに紐づくパラメータであれば、何でもcreateメソッドに渡してしまう」ということです。
そこで、ストロングパラメータを使用します。
ストロングパラメータは、送られてきたパラメータを取得する際に、「何を許可するか」を指定します。
つまり、予め使用するパラメータを指定しておくことで、予期せぬパラメータを取得してしまうことを防ぎます。
params.require(:sample).permit(:title)
上記のコードは、sampleキーのtitleのみ取得を許可します。
"sample"=>{"title"=>"hello", "content"=>"world"}
パラメータは上記のように送られてくるので、このtitleの値だけを取得します。
上記のように設定することで、「hello」などの文字列だけがアクションの内部に入ることができ、もしそれ以外の値が何か入っても、すべて削ぎ落とすようになっています。
使用方法
実際に先ほどのコードに追記すると、以下のようになります。
def create
Sample.create(params.require(:sample).permit(:title))
redirect_to new_sample_path
end
まとめ
Strong Parameterとはセキュリティのために、予め受け入れるデータを指定する機能のこと