概要
railsの勉強をしている際に出てくるマスアサインメントの脆弱性という言葉、正直何を言っているかよくわからなかったので調べて自分の言葉でまとめてみました。
マスアサインメントとは?
RailsのDBを更新する際などに複数のカラムを一括で指定できる事。
複数のカラムを同時に更新できるのはとても便利ですね。
注意点
便利な反面マスアサインメントには危険な部分もあります。それは、不正リクエストによって管理者権限などをいじられてしまう事です。
なぜ管理者権限などがいじられてしまうのか?
Chormeのディベロッパーツールなどを使用してフォームへの投稿内容を編集できてしまうためです。
例えばUserモデルにWebサイトの管理者であるかどうかを示す、admin属性というものがあるとします。
ディベロッパーツールのEdit as HTMLを使用してadmin属性を追加して値を入力して送信をするとそのままDBが更新されてしまいます。
こうなると、管理者でもないのにWebサイトに忍び込んでいたずらが出来てしまうのでとても危険な状態です。
※Rails4からはストロングパラメーターにしないとDBへの保存や更新ができなくなりました。
ストロングパラメーターとは?
マスアサインメントの脆弱性を防止するためにストロングパラメーターというものがあります。
ストロングパラメーターを使用することでディベロッパーツールなどを用いた不正リクエストを防ぐ事ができます。
ストロングパラメーターの使い方
params.require(:user).permit(:name, :email, :password, :password_confirmation)
requireメソッドで引数に設定したキーの値を取得して、permitメソッドで許可したいパラメーターだけをフィルタリングします。