テクノロジー

2017年9月9日

ストロングパラメーターについて

値の正当性についてチェックする仕組みである「ストロングパラメータ」について解説をします。

Ruby on Railsにおけるストンロングパラメーターとは?

今回は、値の正当性についてチェックする仕組みである「ストロングパラメータ」について解説をします。
ユーザから送信されるてくる不正な値を削ぎ落とすストロングパラメータとはRailsの中で具体的にどのような処理が行われているのでしょうか?
効果的に学習を進めるためのお役に立つことができましたら、幸いです。

ストロングパラメータ

ストロングパラメータはRails4.X.Xから導入された、 Web画面上から入力された値を安全に受け取る仕組み です。

ストロングパラメータを実装する目的は、Webブラウザ上で手作業などで意図的にパラメータを書き換えられた際に、エラーとして弾くことができるようにするためです。
このように、書き換えられたくないカラムが書き換えられてしまうことを Mass Assignment脆弱性 と言います。
つまりストロングパラメータは、このMass Assignment脆弱性の対策ということです。

blogsコントローラのcreateアクションに以下のような記述があったことに気づきましたでしょうか?

(app/controllers/blogs_controller.rb)

def create
  @blog = Blog.new(blog_params)
end
  #省略

これはblogsコントローラのcreateアクション内にて、blog_paramsメソッドを実行した結果、

(app/controllers/blogs_controller.rb)

def blog_params
  params.require(:blog).permit(:title, :content)
end

をnew()メソッドの引数として使い、Blogモデルのインスタンスを生成して、変数に格納しています。
この blog_paramsメソッドがストロングパラメータと呼ばれる仕組みを実現しているメソッドです。

(app/controllers/blogs_controller.rb)

params.require(:blog).permit(:title, :content)

ここで上記の記述は、 name=blog[title]name=blog[content] の値を受け取ることを許可するというものです。
:blogblog[] のことです。
:title:content[title][content] のことです。

つまり以下の記述は、 リクエスト上にあるパラメータのうち :blog というキーを持ち、 :title と :content というキーを持つハッシュ形式であること を確かめます。

(app/controllers/blogs_controller.rb)

params.require(:blog).permit(:title, :content)

実際にコンソール上で値をチェックすると、このようになっています。

https://diveintocode.gyazo.com/08661b96bf888a31409b4834d70b8a7a

新たなカラムを追加した場合などパラメータの許可をするのを忘れてデータが保存できないこともよくあります。上の画像の中でUnpermitted parameter: contentというように許可されていないパラメータがあるよというようにログが出力されるのでデータの保存ができない場合はチェックしてみましょう。

以上でストロングパラメータに関しての説明を終了します。
セキュリティを守る上で大切な仕組みであるので、今回で理解を深めていただけましたら幸いです。

オンラインプログラミング学習サービス DIVER Learningsこちら

ダイビックのことをもっと知ってみませんか?