Ruby

[Ruby on Rails]ストロングパラメーターについてカンタンに説明する

Ruby on RailsはRubyによって作成されているWebアプリケーションアプリケーションフレームワークです。

そのRuby on Railsには、ストロングパラメータという仕組みが存在します。

ストロングパラメータとは「Web上から入力されてきた値を制限することで、不正なパラメータを防ぐ仕組み」です。MassAssingment脆弱性というセキュリティ上の問題に対処するための仕組みとしてRails4系から導入されました。

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を要求しているからですね。

  1. requireというメソッドでPOSTで受け取る値のキー設定
  2. permitメソッドで許可して受け取る値を制限

 

そもそもparamsとはRailsにて「送られてきた値を受け取るためのメソッド」です。

その送られてくる情報は主に、「getのクエリパラメータ」or「POSTでformを使って送信されるデータ」。

 

GETとPOSTについてはこちらのリンクを参考にすると分かりやすいです。

https://qiita.com/Sekky0905/items/dff3d0da059d6f5bfabf

※Webの仕組みについて知るには、「Webを支える技術」という本がオススメです。

 

もう少し詳しくストロングパラメーターを使うべき理由を説明します。

なぜ使うべきかというと、先程も述べたMass Asignmentというセキュリティの問題を回避するためです。

例えば、データベース上でユーザーの管理者がtrueかfalseかを判断しているとします。

ブラウザからストロングパラメータを使わずに何でも値を受け入れてしまったら、管理者情報をtrueとして値を送信されてしまう可能性があります。受け取る値を制限していなかった場合、悪意のあるユーザーに管理者権限を乗っ取られてしまうということですね。

 

せっかく作ったWebアプリも乗っ取られてしまい、嫌な目に会うのは避けたいですよね。

そのためにはストロングパラメータをきちんと設定すればOKです。

 

Qiitaの以下の記事も読むと更に理解が深まります。