LoginSignup
3
1

More than 3 years have passed since last update.

マスアサインメント機能と脆弱性(Strong Parameters)

Posted at

概要

なんとなくで終わらせないよう、しっかりStrong Parametersについて理解できるようしっかり手を動かす。

マスアサインメント機能とは

RailsにおけるDBの更新系処理で複数のカラムを一括で指定できる機能の事。
例えば

Person.new(name: 'nakamura', age: 29)

といったように複数のカラムを一気に保存できる。便利な機能。

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

マスアサインメントはハッシュ形式使用する。
例えばユーザーからのリクエストは params 変数に Hash として保存されています。

この内容をそのままにマスアサインメント機能を利用して設定していた場合に、
想定していないカラムを更新されてしまう可能性があります。

例えばUserクラスに name, age, admin の3カラムがあり、
adminはユーザーの画面からは更新させない管理者権限だとします。

Userの新規登録処理で、以下のようなコードを書いていた場合、

user = User.new(params[:user])
user.save

悪意あるユーザーがroleadminという値を設定してリクエストを送ってきた場合(不正リクエスト)、意図せず管理者ユーザーを作られてしまう可能性がある。

それを防ぐためにストロングパラメータという機能がある。

Strong Parameters(ストロングパラメータ)とは

マスアサイメント脆弱性を回避するためにrails4以降に提供されるようになった機能

def create
  @person = Person.new(person_params)
end


private

def person_params
  params.require(:person).permit(:name, :age)
end
def <Model>_params
  params.require(:<Model>).permit(:<カラム名1>, :<カラム名2>)
end

上記のように
あらかじめ設定可能な値を明示的に宣言しておくことで脆弱性を回避できます。

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