この記事は東京海洋大学NePPの Advent Calendar 2024の6日目です。
はじめに
こんにちは!
私がStrong Parametersについて学んだことのアウトプットの機会として
この記事を書きました。
あくまで個人的な見解ですので、あしからずご容赦ください。
Strong Parametersとは
Strong Parametersは、ユーザーからのリクエストの際に悪意のあるパラメータに対するセキュリティを強化するためのものです。
ユーザーから送られてくるリクエストの中のパラメータに指定した値のみをDBに保存することを可能にするものです。(指定外の値は保存されない。)
これによって、悪意のあるユーザーが不正な値をパラメータに含んでリクエストを送ってきても、DBに保存されず、無視することができます。
Strong Parametersがなぜ必要なのか
結論から言うと、Mass Assignmentの脆弱性を防ぐためです。
例
Railsでは、フォームやAPIリクエストから送られてきたデータを、一括でモデルに割り当てる「Mass Assignment」という仕組みがあります。
@user = User.new(params[:user])
このコードは、送信されたparams[:user]のすべての値を、Userモデルのフィールドに対応付けて保存しようとします。ですが、このままだと以下のような脆弱性が発生します。
{
"user": {
"name": "Hashimoto",
"email": "Hashimoto1111@.com",
"admin": true
}
}
例えば上記のようなリクエストが送信されると、adminフィールドがtrueに設定されてしまい、攻撃者が管理者権限を取得する可能性があります。
解決策
ここで出てくるのが
Strong Parametersです!明示的に許可されたフィールドだけをモデルに渡すことで、この脆弱性を防ぐことができます。
この場合はnameとemailのパラメータのみをモデルに渡すことができます。
def user_params
params.require(:user).permit(:name, :email)
end
@user = User.new(user_params)
おわり
ここまで、なぜStrong Parametersが必要なのかということに触れてきました。
このように、なぜその実装が必要なのかやなぜその実装が必要になったのかという背景を理解できるととても理解力が上がると思います!