マスアサインメント脆弱性
マスアサインメント脆弱性(Mass Assignment Vulnerability)は、Laravelなどのフレームワークでよく見られるセキュリティ上の問題の一つです。この脆弱性は、ユーザーからのリクエストデータを直接モデルに割り当てる際に発生します。通常、ユーザーがリクエストに含めたいくつかのフィールドだけを許可するために、fillable
や guarded
などのプロパティを使用しますが、これらを正しく設定せずにモデルにデータを割り当てると、意図しないフィールドへの書き込みが行われる可能性があります。
例えば、以下のようなユーザーモデルがあるとします:
class User extends Model
{
protected $fillable = ['name', 'email'];
}
$fillable
プロパティには、name
とemail
フィールドのみが許可されており、role
フィールドは含まれていません。したがって、ユーザーのリクエストデータにrole
フィールドが含まれる場合、マスアサインメントの脆弱性が発生します。これを防ぐためには、適切なフィールドだけを$fillable
に指定する必要があります。以下のようにrole
フィールドを追加すると、正しく設定されます:
phpCopy code
class User extends Model
{
protected $fillable = ['name', 'email', 'role'];
}
これにより、name
、email
、およびrole
フィールドのみがマスアサインメントを許可され、それ以外のフィールドには書き込みが行われなくなります。
なお、$fillable
プロパティはモデルにマスアサインメントを許可する属性を指定し、一方、$guarded
プロパティは、指定したフィールドをマスアサインメントから保護します。
つまり
protected $guarded = ['role'];
とするとrole
は一括代入から保護され、マスアサインメントで変更されないようになります。