ホームページ  >  記事  >  バックエンド開発  >  ベストプラクティスシリーズ (4) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ検証と Laravel の基礎となるフィールド検証の実装

ベストプラクティスシリーズ (4) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ検証と Laravel の基礎となるフィールド検証の実装

PHP中文网
PHP中文网オリジナル
2016-06-20 12:27:101085ブラウズ


2. 検証データ

PHP ネイティブ実装

入力データも重要です。フィルタリングとは異なり、検証では入力データから情報が削除されるのではなく、ユーザー入力が期待どおりであることを確認するだけです。電子メール アドレスの場合は、ユーザーが電子メール アドレスを入力していることを確認し、電話番号の場合は、ユーザーが電話番号を入力していることを確認します。

検証では、特定の形式に準拠した正しいデータがアプリケーションのストレージ層に保存されていることを確認します。無効なデータが見つかった場合は、データ ストレージ操作を中止し、対応するエラー メッセージを表示する必要があります。ユーザーに正しいデータを入力するよう通知します。検証により、データベース内の潜在的なエラーも回避できます。たとえば、MySQL が DATETIME 型の値を予期し、DATE 文字列が指定された場合、MySQL はエラーを報告するか、またはデフォルト値を使用します。無効なデータが破壊されます。

入力データの検証を実装するには、特定の FILTER_VALIDATE_* フラグを filter_var 関数に渡すことができます。PHP には、ブール値、電子メール アドレス、浮動小数点数、整数、IP、正規表現、URL を検証するためのフラグが用意されています。 (詳細については、http://php.net/manual/en/filter.filters.validate.php を参照してください)。次の例は、電子メール アドレスを検証する方法を示しています。

<?php
$input = &#39;yaojinbu@163.com&#39;;
$isEmail = filter_var($input, FILTER_VALIDATE_EMAIL);
if ($isEmail !== FALSE) {
    echo &#39;success&#39;;
} else {
    echo &#39;failed&#39;;
}

検証が成功した場合、filter_var の戻り値に特に注意してください。失敗すると false が返されます。

PHP コンポーネントの助けを借りて

filter_var 関数は検証用に多くの識別子を提供しますが、これは画一的なアプローチであり、次のことはできません。すべてのデータを検証するには、filter_var 関数に加えて、より複雑な検証関数を実行するのに役立つ次のコンポーネントもあります:

  • aura/filter

  • 尊重/検証

  • シンフォニー/検証者


注:入力データが期待値に準拠し安全であることを確認するには、検証とフィルタリングの両方を行う必要があります。

Laraval でのデータ検証の実装

データ検証のほとんどのシナリオは、ユーザーが送信したデータに対する豊富な検証メソッドも提供します。 Laravel のデータ検証については、公式ドキュメント http://laravelacademy.org/post/3279.html を参照してください。ここでは、ユーザー登録を例として、検証メソッドが AuthController で定義されています:

ベストプラクティスシリーズ (4) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ検証と Laravel の基礎となるフィールド検証の実装

このルールは、Laravel で新しいユーザーを登録するときに使用されます。 、複数の検証ルールは | で区切られます。電子メールを例に取ると、このルールは電子メール フィールドが必須であり、電子メール アドレスである必要があり、最大長が 255 で、ユーザー テーブル内で一意であることを示します。検証プロセス全体の実装を見てみましょう。検証メソッドは RegistersUsers トレイト (IlluminateFoundationAuthRegistersUsers) で呼び出されます。

ベストプラクティスシリーズ (4) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ検証と Laravel の基礎となるフィールド検証の実装

このメソッドは最初に、 AuthController を使用して Validator (IlluminateValidationValidator) を完了し、バリデーター インスタンスで failed メソッドを呼び出して失敗したかどうかを確認します。fails メソッドは pass メソッドを呼び出します:

ベストプラクティスシリーズ (4) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ検証と Laravel の基礎となるフィールド検証の実装



pass メソッドは最終的に各ルール (初期化中に配列に変換される) を走査し、validate メソッドを呼び出します:

ベストプラクティスシリーズ (4) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ検証と Laravel の基礎となるフィールド検証の実装

各ルールに対応する検証メソッドが最終的に組み立てられ、呼び出されることがわかります。電子メールを例にとると、最終的なメソッドは validateEmail です。この検証メソッドは Validator で (実際には検証ドキュメントのそれぞれで) 定義されています。ルールは、対応する検証メソッドをここで見つけることができます):

ベストプラクティスシリーズ (4) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ検証と Laravel の基礎となるフィールド検証の実装


コードを通して、PHP が filter_var によって提供され、FILTER_VALIDATE_EMAIL に渡されていることがわかります。フラグを設定して、受信フィールドが有効な電子メール アドレスであることを確認します。他の検証ルールの実装については、興味のある学生は Validator クラスを学ぶことができます。

上記は、ベストプラクティスシリーズ (IV) - PHP セキュリティの 3 つの柱: フィルタリング、検証、エスケープ - 検証の章と Laravel の基礎となるフィールド検証の実装の内容です。 PHP 中国語 Web サイト (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。