1
0

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 3 years have passed since last update.

【Ruby on Rails】ストロングパラメータの要約

Last updated at Posted at 2021-01-01

ストロングパラメータとは

  • フォームから送られた値を指定して、安全に受け取る為の仕組み
    マスアサインメントの脆弱性を解消する為に使用


* **マスアサインメントとは** DBへの保存・更新をする際に複数のカラムを一括で指定できる仕組みのこと

マスアサインメントの脆弱性

例えばフォームからのデータ入力の際、デベロッパーツール等を使用して入力用フィールドとそれに対応するカラムの入れ替えや書き換えをすることにより、意図しないデータの入力値をそのまま受け入れてしまう可能性がある。

スクリーンショット 2020-12-29 10.12.28.png
↓ 拡大
スクリーンショット 2020-12-29 10.08.20.png
※本来のフォームに対応しているカラムとは異なったカラムにデータが保存されてしまう

ストロングパラメータのメリット

投稿フォームに入力された情報をparamsで取得する際、不正な内容を保存することを防ぐことができる。
ストロングパラメータでカラムを設定しておくと、そのカラムの情報だけを受け取ることが可能。

使用方法

books_controller.rb
private

def book_params
  params.require(:book).permit(:title, :body)
end     #モデルの指定      #キーの指定

permitメソッド
= paramsで取得したキーのうち、データベースに保存することを許可するメソッド

上記の場合、paramsの中に他のカラムのデータが含まれていても、データベースには保存されない。

具体的には、フォームを送信した際に送られてくるパラメータは基本的に下記のような二重ハッシュ構造で送られてくるが、今回の場合はその中の"book"の部分のみを保存することを許可している。

terminal
Processing by BooksController#create as HTML
Parameters: {
 "utf8"=>"✓", 
 "authenticity_token"=>"トークン情報が記載",
 "book"=>{"title"=>"坊ちゃん", "body"=>"夏目漱石による小説"},  #params.require(:book).permit(:title, body)で指定された部分
 "commit"=>"Create Book"
}

privateメソッド

上記のコード内の最初の行で記述している"private"メソッドにより、それ以下に記述したメソッドや変数に制限をかけることが出来る。

上記の場合はbooks_controller内で使用している為、その他のコントローラ(例:users_controller)では上述した"book_params"メソッドは呼び出せない。

まとめ

ストロングパラメータをprivateメソッドのスコープ内で使用することによって、不正なデータの保存を防ぐことができ、セキュリティが強固になる。

内容に関して間違い等あればコメントなどでご指摘頂けると嬉しいです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?