1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

東京海洋大学NePPAdvent Calendar 2024

Day 6

Strong Parametersの重要性

Last updated at Posted at 2024-12-07

この記事は東京海洋大学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が必要なのかということに触れてきました。
このように、なぜその実装が必要なのかやなぜその実装が必要になったのかという背景を理解できるととても理解力が上がると思います!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?