RUby on Rails にはストロングパラメータという仕組みが存在します。
これは何かというと、「Web上から入力されてきた値を制限することで、不正なパラメータを防ぐ仕組み」です。MassAssingment脆弱性というセキュリティ上の問題に対処するための仕組みとしてRails4系から導入されました。
MassAssingment脆弱性についてはこちら
https://qiita.com/tbpgr/items/63028f5e19a2d1617e40
ストロングパラメーターはDB(データベース)の更新を安全にしてくれるもの。
クラッカー(悪意のある者)が、Webアプリケーションに不正な情報を送ろうとしたときに、ストロングパラメータがあればそれを防ぐことができます。
使い方の例
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
requireは「必要とする」, permitは「許可する」という意味の英単語。
つまり、params[:user][:name] はOKだけど、params[:password]やparams[:email]は受け入れられないということです。require(:user)で:userを要求しているからですね。
requireというメソッドでPOSTで受け取る値のキー設定
permitメソッドで許可して受け取る値を制限
そもそもparamsとはRailsにて「送られてきた値を受け取るためのメソッド」です。
その送られてくる情報は主に、「getのクエリパラメータ」or「POSTでformを使って送信されるデータ」です。
GETとPOSTについてはこちらのリンクを参考にすると分かりやすいです。
※Webの仕組みについて知るには、「Webを支える技術」という本がオススメです。
もう少し詳しくストロングパラメーターを使うべき理由を説明します。
なぜ使うべきかというと、先程も述べたMass Asignmentというセキュリティの問題を回避するためです。
例えば、データベース上でユーザーの管理者がtrueかfalseかを判断しているとします。
ブラウザからストロングパラメータを使わずに何でも値を受け入れてしまったら、管理者情報をtrueとして値を送信されてしまう可能性があります。受け取る値を制限していなかった場合、悪意のあるユーザーに管理者権限を乗っ取られてしまうということですね。
管理者権限が乗っ取られてしまったら、せっかく自分で作ったWebアプリが嫌な目にあいますよね。
そのためにはストロングパラメータをきちんと設定すればOKです。
Qiitaの以下の記事がとても分かりやすいです。
https://qiita.com/mochio/items/45b9172a50a6ebb0bee0