0Pricing
Ruby Academy · レッスン

Strong Parameters

安全なパラメーター処理です。

「Strong Parameters」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

マスアサインメントの問題

フォームは一度に多くのフィールドを送信します。すべてをそのままモデルに渡すと、攻撃者が意図していなかったフィールドを追加し、admin: true のような値を設定できてしまいます。これがマスアサインメントの脆弱性です。

  • ユーザー入力は決して信頼してはいけません。
  • 許可するフィールドを明示的に指定する必要があります。
  • RailsではStrong Parametersによってこれを強制します。

ストロングパラメータとは

ストロングパラメータを使うと、モデルが受け付けるパラメータを明示的に宣言する必要があります。許可されていないパラメータをマスアサインしようとすると、Railsはエラーを送出します。

これにより、気付かないまま存在するセキュリティホールを、明示的に許可してレビューできるフィールド一覧に置き換えられます。

requireとpermit

このパターンでは、2つのメソッドを使います。

  • require(:model) は、トップレベルのキーが存在することを保証します。
  • permit(:field, ...) は、内側のフィールドを許可リストに登録します。
def article_params
  params.require(:article).permit(:title, :body)
end

ヘルパーの利用

privateな model_params メソッドを定義し、作成や更新を行う箇所で呼び出します。生の params をモデルに渡してはいけません。

def create
  @article = Article.new(article_params)
  @article.save
  redirect_to @article
end

private

def article_params
  params.require(:article).permit(:title, :body)
end

privateメソッドにする理由

許可リストを1つのprivateメソッドにまとめると、次の利点があります。

  • create と update で同じルールを共有できます。
  • 許可されているフィールドを簡単に見つけてレビューできます。
  • コントローラのアクションとして公開されません(privateメソッドにはルートを設定できません)。

フィルタリングされる値

送信されたキーのうち、permit のリストにないものは、モデルに渡る前にすべて破棄されます。フォームに何らかの理由で admin が含まれていても、title と body だけを許可していれば、admin の値は無視され、レコードは安全に保たれます。

配列の許可

チェックボックスのリストや複数選択など、配列を送信するフィールドは、値として空の配列を渡して許可します。これにより、そのキーに対して複数の値を受け付けられます。

params.require(:article).permit(:title, tag_ids: [])

ネストしたハッシュの許可

ネストした属性(親と子を一度に編集するフォーム)では、内側のフィールドを記述したハッシュを使って、ネストしたキーを許可します。

params.require(:order).permit(
  :customer_name,
  items_attributes: [:product_id, :quantity]
)

不足しているパラメータの処理

必須のキーがない場合、require は ParameterMissing を送出し、Railsは400 Bad Requestとしてレンダリングします。これにより、不正なリクエストからアクションを自動的に保護できます。

# Missing :article key raises:
# ActionController::ParameterMissing

permit!は危険

params.permit! を呼び出してすべてを許可することもできますが、これではマスアサインメントの脆弱性が再び開いてしまいます。信頼できる内部コンテキスト以外では避けてください。常に明示的なホワイトリストを優先してください。

ベストプラクティス

params を安全に保ちます:

  • 必要最小限のフィールドだけをホワイトリストに登録します。
  • 公開フォームから role や admin のような機密性の高いフラグを決して許可しないでください。
  • このようなフィールドは、サーバー側のロジックに基づいてコントローラーで明示的に設定します。

理解度チェック

Strong Parameters についての理解度を確認します。

まとめ:Strong Parameters

入力を安全にフィルタリングする方法を学びました:

  • マスアサインメントは現実的なセキュリティリスクです。
  • require はトップレベルのキーを要求し、permit はフィールドをホワイトリストに登録します。
  • ホワイトリストは共有のプライベートメソッドにまとめます。
  • 必要に応じて配列やネストしたハッシュを許可します。
  • permit! は避け、機密性の高いフラグを決して許可しないでください。

次は、ビューとレンダリングを使ってレスポンスを返します。

よくある質問

「Strong Parameters」レッスンは無料ですか?

はい。「Strong Parameters」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「Strong Parameters」で何を学びますか?

安全なパラメーター処理です。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Strong Parameters」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ルートとリソース
  2. コントローラーとアクション
  3. Strong Parameters
  4. ビューとレンダリング
← Ruby Academyに戻る