キーポイント
filter_var()
およびfilter_input()
関数を使用して適用できます。 この記事では、フィルターアプリケーションに含まれるものが非常に重要な理由を検討します。特に、PHPで外部データを検証およびクリーニングする方法について説明します。
アプリの外部入力を絶対に信用しないでください。これは、Webアプリケーションを開発する人なら誰でも学習しなければならない最も重要な教訓の1つです。
外部入力は何でもかまいません - $_GET
および$_POST
フォームからの入力データ、http要求本体の特定の要素、さらには$_SERVER
Hyperglobal変数の特定の値です。 Cookie、セッション値、アップロードおよびダウンロードされたドキュメントファイルも外部入力と見なされます。
外部データをコードに処理、出力、含める、または接続するたびに、攻撃者がアプリケーションにコードを注入することができます(いわゆるインジェクション攻撃)。したがって、外部データの各部分が適切にフィルタリングされ、アプリケーションに安全に統合できるようにする必要があります。
フィルタリングの観点から、主に2つのタイプがあります。検証とクリーニングです。
検証
外部入力が私たちの期待を満たしていることを確認します。たとえば、電子メールアドレスが期待される場合があるため、name@domain.com
に似た形式が期待されます。これを行うには、FILTER_VALIDATE_EMAIL
フィルターを使用できます。または、ブール値が期待される場合は、PHPのFILTER_VALIDATE_BOOL
フィルターを使用できます。
、FILTER_VALIDATE_BOOL
、FILTER_VALIDATE_INT
、および電子メールとドメイン名をそれぞれフィルタリングする場合、FILTER_VALIDATE_FLOAT
およびFILTER_VALIDATE_EMAIL
が含まれます。 FILTER_VALIDATE_DOMAIN
です。これにより、正規表現に応じてフィルタリングできます。このフィルターを使用すると、フィルタリングする正規表現を変更することにより、カスタムフィルターを作成できます。 FILTER_VALIDATE_REGEXP
クリーニング
クリーニングとは、外部入力から違法または危険な文字を削除するプロセスです。最良の例は、元のSQLクエリに挿入する前にデータベース入力をクリーンアップすることです。
同様に、最も便利なクリーニングフィルターの一部には、
、FILTER_SANITIZE_STRING
、FILTER_SANITIZE_CHARS
などの基本的なタイプのクリーニング用のフィルター、およびURLや電子メールのクリーニング用のFILTER_SANITIZE_INT
およびFILTER_SANITIZE_URL
が含まれます。 FILTER_SANITIZE_EMAIL
filter_var()
filter_input()
フィルターアプリケーションは、
およびfilter_var()
関数を介して行われます。 filter_input()
関数は、指定されたフィルターを変数に適用します。フィルタリングする値、適用するフィルター、およびオプションのオプションの配列が得られます。たとえば、メールアドレスを確認しようとすると、次のコードを使用できます。
filter_var()
<?php $email = 'your.email@sitepoint.com'; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo("This email is valid"); }
<?php $string = "<h1>Hello World</h1>"; $sanitized_string = filter_var($string, FILTER_SANITIZE_STRING); echo $sanitized_string;
filter_input()
関数と同様に機能しますが、入力タイプ(get、post、cookie、server、またはenvから選択できます)、フィルタリングする変数、フィルターが必要です。また、選択的に一連のオプションを取得します。
同様に、外部入力変数「電子メール」がGETを介してアプリケーションに送信されているかどうかを確認する場合は、次のコードを使用できます。
filter_var()
結論
<?php if (filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "The email is being sent and is valid."; }
これらは、PHPでのデータフィルタリングの基本です。他の手法を使用して、正規表現の適用などの外部データをフィルタリングできますが、この記事に表示される手法では、ほとんどのユースケースで十分です。 検証とクリーニングの違い、およびフィルター機能の使用方法を理解していることを確認してください。この知識により、PHPアプリケーションはより信頼性が高く安全になります!
PHPデータフィルタリング(FAQ)に関するFAQ
PHPデータフィルタリングの重要性は何ですか?PHPデータフィルタリングは、Webアプリケーションのセキュリティと整合性を確保するために重要です。これは、SQLインジェクションやクロスサイトスクリプティング(XSS)などのセキュリティの脆弱性の一般的なソースであるユーザー入力を検証およびクリーニングするのに役立ちます。データをフィルタリングすることにより、悪意のあるデータまたは誤ったデータがアプリケーションまたはデータベースに損傷を与えることを防ぐことができます。また、データの一貫性と信頼性を維持するのにも役立ちます。これは、アプリケーションのスムーズな動作にとって重要です。
、
、いくつかの一般的なPHPフィルター関数には、filter_var()
、filter_input()
、filter_has_var()
、およびfilter_id()
が含まれます。 filter_var()
関数は、指定されたフィルターを使用して変数をフィルタリングします。 filter_input()
関数名前で特定の外部変数を使用し、オプションでフィルタリングします。 filter_has_var()
関数は、指定された入力型の変数が存在するかどうかをチェックし、filter_id()
関数は名前付きフィルターに属するフィルターIDを返します。
filter_var()
関数を使用する方法は? PHPのfilter_var()
関数は、指定されたフィルターを使用して変数をフィルタリングするために使用されます。フィルタリングする変数と適用されるフィルターのタイプの2つのパラメーターを受け入れます。たとえば、変数が電子メールであることを確認するには、次のようにFILTER_VALIDATE_EMAIL
関数を備えたfilter_var()
フィルターを使用できます。
<?php $email = 'your.email@sitepoint.com'; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo("This email is valid"); }
PHPでユーザー入力をクリーンアップする方法は?
関数とクリーニングフィルターを使用して、PHPでユーザー入力をクリーニングできます。たとえば、ユーザー名を取得するユーザー名をクリーニングするには、次のようにfilter_input()
フィルターを使用できます。
FILTER_SANITIZE_STRING
<?php $string = "<h1>Hello World</h1>"; $sanitized_string = filter_var($string, FILTER_SANITIZE_STRING); echo $sanitized_string;
、FILTER_FLAG_STRIP_LOW
、FILTER_FLAG_STRIP_HIGH
が含まれます。たとえば、FILTER_FLAG_ENCODE_LOW
フラグは、入力から32未満のASCII値の文字を削除します。 FILTER_FLAG_ENCODE_HIGH
FILTER_FLAG_STRIP_LOW
PHPでフィルターフラグを使用する方法は?
関数に対する3番目の引数としてそれらを渡すことにより、PHPのフィルターフラグを使用できます。たとえば、IPアドレスをフィルタリングしてIPv4アドレスのみを許可するには、次のようにfilter_var()
フラグを使用できます。
filter_input()
FILTER_FLAG_IPV4
PHPの
<?php if (filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "The email is being sent and is valid."; }
filter_has_var()
関数は、指定された入力型の変数が存在するかどうかを確認するために使用されます。入力タイプと変数名の2つのパラメーターを受け入れます。変数が存在する場合、trueを返します。 filter_has_var()
関数を使用する方法は? PHPのfilter_has_var()
関数を使用して、特定の入力変数が存在するかどうかを確認できます。たとえば、「username」という名前の投稿変数が存在するかどうかを確認するには、これを行うことができます。
以上がクイックヒント:PHPでデータをフィルタリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。