マスアサインメント脆弱性
マスアサインメント脆弱性(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は一括代入から保護され、マスアサインメントで変更されないようになります。