ホームページ >バックエンド開発 >PHPチュートリアル >ベストプラクティスシリーズ (4) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ検証と Laravel の基礎となるフィールド検証の実装
PHP ネイティブ実装
入力データも重要です。フィルタリングとは異なり、検証では入力データから情報が削除されるのではなく、ユーザー入力が期待どおりであることを確認するだけです。電子メール アドレスの場合は、ユーザーが電子メール アドレスを入力していることを確認し、電話番号の場合は、ユーザーが電話番号を入力していることを確認します。
検証では、特定の形式に準拠した正しいデータがアプリケーションのストレージ層に保存されていることを確認します。無効なデータが見つかった場合は、データ ストレージ操作を中止し、対応するエラー メッセージを表示する必要があります。ユーザーに正しいデータを入力するよう通知します。検証により、データベース内の潜在的なエラーも回避できます。たとえば、MySQL が DATETIME 型の値を予期し、DATE 文字列が指定された場合、MySQL はエラーを報告するか、またはデフォルト値を使用します。無効なデータが破壊されます。
入力データの検証を実装するには、特定の FILTER_VALIDATE_* フラグを filter_var 関数に渡すことができます。PHP には、ブール値、電子メール アドレス、浮動小数点数、整数、IP、正規表現、URL を検証するためのフラグが用意されています。 (詳細については、http://php.net/manual/en/filter.filters.validate.php を参照してください)。次の例は、電子メール アドレスを検証する方法を示しています。
<?php $input = 'yaojinbu@163.com'; $isEmail = filter_var($input, FILTER_VALIDATE_EMAIL); if ($isEmail !== FALSE) { echo 'success'; } else { echo 'failed'; }
検証が成功した場合、filter_var の戻り値に特に注意してください。失敗すると false が返されます。
PHP コンポーネントの助けを借りて
filter_var 関数は検証用に多くの識別子を提供しますが、これは画一的なアプローチであり、次のことはできません。すべてのデータを検証するには、filter_var 関数に加えて、より複雑な検証関数を実行するのに役立つ次のコンポーネントもあります:
aura/filter
尊重/検証
シンフォニー/検証者
注:入力データが期待値に準拠し安全であることを確認するには、検証とフィルタリングの両方を行う必要があります。
Laraval でのデータ検証の実装
データ検証のほとんどのシナリオは、ユーザーが送信したデータに対する豊富な検証メソッドも提供します。 Laravel のデータ検証については、公式ドキュメント http://laravelacademy.org/post/3279.html を参照してください。ここでは、ユーザー登録を例として、検証メソッドが AuthController で定義されています:
このルールは、Laravel で新しいユーザーを登録するときに使用されます。 、複数の検証ルールは | で区切られます。電子メールを例に取ると、このルールは電子メール フィールドが必須であり、電子メール アドレスである必要があり、最大長が 255 で、ユーザー テーブル内で一意であることを示します。検証プロセス全体の実装を見てみましょう。検証メソッドは RegistersUsers トレイト (IlluminateFoundationAuthRegistersUsers) で呼び出されます。
このメソッドは最初に、 AuthController を使用して Validator (IlluminateValidationValidator) を完了し、バリデーター インスタンスで failed メソッドを呼び出して失敗したかどうかを確認します。fails メソッドは pass メソッドを呼び出します:
pass メソッドは最終的に各ルール (初期化中に配列に変換される) を走査し、validate メソッドを呼び出します:
各ルールに対応する検証メソッドが最終的に組み立てられ、呼び出されることがわかります。電子メールを例にとると、最終的なメソッドは validateEmail です。この検証メソッドは Validator で (実際には検証ドキュメントのそれぞれで) 定義されています。ルールは、対応する検証メソッドをここで見つけることができます):
コードを通して、PHP が filter_var によって提供され、FILTER_VALIDATE_EMAIL に渡されていることがわかります。フラグを設定して、受信フィールドが有効な電子メール アドレスであることを確認します。他の検証ルールの実装については、興味のある学生は Validator クラスを学ぶことができます。
上記は、ベストプラクティスシリーズ (IV) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ - 検証の章と Laravel の基礎となるフィールド検証の実装の内容です。 PHP 中国語 Web サイト (www.php.cn)!