Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ストロングパラメーターについてサクッと解説。

More than 1 year has passed since last update.

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についてはこちらのリンクを参考にすると分かりやすいです。

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

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

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

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

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

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

管理者権限が乗っ取られてしまったら、せっかく自分で作ったWebアプリが嫌な目にあいますよね。

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

Qiitaの以下の記事がとても分かりやすいです。
https://qiita.com/mochio/items/45b9172a50a6ebb0bee0

Panzo_webengineer
未経験からエンジニア転職をするために勉強中です 。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away