Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Spatie Packageはユーザー入力の検証と消毒をどのように管理していますか


Spatie Packageはユーザー入力の検証と消毒をどのように管理していますか


Spatieパッケージは、主に一連のカスタムLaravel検証ルールとLaravelの検証システムとの統合を通じてユーザー入力検証を管理し、処理または保存される前にデータを検証するための構造化された拡張可能なアプローチを提供します。

Spatieパッケージの検証管理

###カスタム検証ルール
Spatieは、Laravelのネイティブ検証機能を拡張する有用な検証ルールのコレクションを提供します。これらのルールは、Laravelフォームリクエストで、またはコントローラー検証ロジックで直接使用できます。例は次のとおりです。

- 承認されたルール:ログインしたユーザーが、ユーザーID [1]の一致などのポリシーをチェックすることにより、モデルインスタンスで特定のアクションを実行することを許可されているかどうかを検証します。
- 通貨ルール:特定の入力が有効な通貨コードであるかどうかを検証し、ISO 3166標準をサポートします[1]。
-Enumルール:入力値が事前定義された列挙値のセットに属していることを検証します。
- モデルセクシストルール:配列内のすべての値が指定されたモデルの属性として存在するかどうかをチェックし、参照整合性[1]を保証します。
- 区切りルール:最小/最大アイテムを設定し、複製を許可し、セパレーターをカスタマイズするオプションを含む、区切り値(たとえば、コンマ区切り電子メール)を含む文字列を検証します[1]。

これらのルールは、Laravelの検証システムとシームレスに統合され、開発者は「ルール()」フォームリクエストの方法またはインライン検証配列でそれらを定義できるようにします。

Spatie Laravelデータパッケージの検証

Spatie Laravelデータパッケージは、データオブジェクトを作成する前にデータを検証することにより検証を強化します。検証は、次の場合に自動的に発生します。

- リクエストからデータオブジェクトを注入します。
- 要求データを使用してデータオブジェクトに「From」メソッドを呼び出します。

`validate()`または `validateandcreate()`などのメソッドを介して検証を手動でトリガーすることもできます。このパッケージは、常に検証または無効化の検証戦略の構成をサポートし、検証を完全に検証または無効にし、検証がいつ発生するかをきめんゆい制御を提供します[4]。

2段階の検証

Spatieは2段階の検証アプローチを調査しています。

- 最初のステップでは、データ構造が健全であることを確認し、PHPエラーを防ぐための基本的なルールを適用します。
-2番目のステップは、より複雑な検証ルールを適用します。

このアプローチは、早期にエラーをキャッチし、より明確な検証フィードバックを提供することにより、堅牢性を向上させることができます[7]。

##消毒
SPATIEのパッケージは主に検証に焦点を当てていますが、Laravel自体は検証とデータバインディングを介して、暗黙的に消毒を処理します。たとえば、Laravelのフォーム要求は、アプリケーションで使用される前にデータを検証およびフィルタリングすることにより、入力を自動的に消毒します。 Spatieâの検証ルールは、特定のビジネスルールまたはフォーマットにデータが適合するようにすることにより、これを補完します。

開発者は、カスタム検証属性を作成するか、必要に応じて検証の前または後に入力を手動で消毒することにより、消毒を拡張できます[3]。

## まとめ
-Spatieは、認証チェック、列挙検証、存在チェック、および区切られた入力検証[1]など、一般的および複雑な検証シナリオのLaravel検証ルールの豊富なセットを提供します。
-SpatieのLaravelデータパッケージは、オブジェクトの作成前にデータを検証し、手動または自動検証と構成可能な検証戦略のオプションを使用します[4]。
- 検証の堅牢性を高めるために、2段階の検証プロセスが開発されています[7]。
- 消毒は一般に、Laravelの検証および入力処理メカニズムによって処理され、Spatieのツールは検証の正しさと拡張性に焦点を当てています[3]。

このアプローチにより、ユーザー入力は、処理、エラーの削減、セキュリティの改善の前に、アプリケーション固有のルールに従って厳密に検証されます。

引用:
[1] https://github.com/spatie/laravel-validation-rules
[2] https://zapkit.dev/blog/ultimate-guide-to-validate-and-sanitize-http-requests-in-laravel
[3] https://spatie.be/docs/laravel-data/v4/validation/using-validation-attributes
[4] https://spatie.be/docs/laravel-data/v4/validation/introduction
[5] https://escape.tech/blog/laravel-sql-injection-guide/
[6] https://www.youtube.com/watch?v=sw1dj5pcam
[7] https://github.com/spatie/laravel-data/discussions/470
[8] https://stackoverflow.com/questions/72186973/checking-for-user-permissions-------- in-in-in-in-control
[9] https://spatie.be/docs/laravel-model-tates/v2/request-validation/01-state-validation-rule