🔖

恥ずかしながら、忘れかけてしまっていたStrong Parametersの備忘録

2023/12/22に公開

Strong Parameters

Ruby on RailsにおけるStrong Parametersの仕組みは、ユーザからのリクエストの際に送られてくるパラメータに対するセキュリティを高める仕組みの一つです。

Strong Parametersの基本的な概念

Strong Parametersは、Railsのコントローラー内で使用されるセキュリティ機能です。これは、ユーザーから送信されるパラメータのうち、開発者が事前に定義したもののみをデータベースに保存することを可能にします。これにより、悪意のあるユーザーによる不正なデータの注入や、アプリケーションの不正操作を防ぐことができます。

一言で言えば、Mass Assignmentを防ぐ機能です。

UserモデルでのStrong Parametersの実装

例としてUserモデルがname, email, passwordといった属性を持つ場合、これらを安全に扱うためには次のようにコントローラーにStrong Parametersを設定します。

class UsersController < ApplicationController

  # ...(その他のアクション)

  private

  def user_params
    params.require(:user).permit(:name, :email, :password)
  end
end

ここで、**params.require(:user):userキーにネストされたパラメータの存在を必須とすることを意味しています。permit(:name, :email, :password)**は、これら指定された属性のみがデータベースに保存されることを許可するためのものです。

Strong Parametersの活用

コントローラーのアクション(例えば、ユーザー作成の**createアクション)では、user_params**メソッドを使用してパラメータをフィルタリングします。

def create
  @user = User.new(user_params)
  if @user.save
    # 成功した場合の処理
  else
    # 失敗した場合の処理
  end
end

この方法により、不正なパラメータがモデルに渡されることを防ぎ、アプリケーションのセキュリティを向上させることができます。

requirepermitの違い

  • require: 必須とされるパラメータを指定します。この例では**:userキーが必須であることを意味しています。:user**キーが存在しない場合、エラーが発生します。
  • permit: 許可されたパラメータを指定します。これにより、nameemail、**password**のみが許可され、他のパラメータは無視されます。

paramsハッシュの構造

paramsハッシュは通常、次のような構造を持っています:

params = {
  user: {
    name: "ユーザー名",
    email: "user@example.com",
    password: "password"
  }
}

このハッシュ内で、**require(:user)userキー下のパラメータ群を指定し、permit(:name, :email, :password)**はその中の特定のパラメータのみを許可することを意味します。これにより、安全でコントロールされた方法でユーザー入力を扱うことが可能になります。

Discussion