1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Strong Parameterについて

1
Last updated at Posted at 2020-06-11

StrongParameterとは

Web画面上から入力された値を安全に受け取る仕組みです。
ストロングパラメータを実装する目的は、Webブラウザ上で意図的にパラメーターを書き換えられた際に、エラーとして弾くことができるようにするためです。
このように、書き換えられたくないカラムが書き換えられてしまうことをマスアサインメント脆弱性といいます。
要するにストロングパラメータは、このマスアサインメント脆弱性の対策です。

使用例

samples_controller.rb
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」などの文字列だけがアクションの内部に入ることができ、もしそれ以外の値が何か入っても、すべて削ぎ落とすようになっています。

使用方法

実際に先ほどのコードに追記すると、以下のようになります。

samples_controller.rb
def create
  Sample.create(params.require(:sample).permit(:title))
  redirect_to new_sample_path
end

まとめ

Strong Parameterとはセキュリティのために、予め受け入れるデータを指定する機能のこと

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?