フィルター
PHPフィルターとは何ですか?
PHP フィルターは、安全でないソースからのデータを検証およびフィルターするために使用されます。
ユーザー入力またはカスタム データのテスト、検証、フィルタリングは、Web アプリケーションの重要な部分です。
PHP のフィルター拡張機(jī)能は、データのフィルター処理を簡単かつ高速にするように設(shè)計されています。
なぜフィルターを使用するのですか?
ほぼすべての Web アプリケーションは外部入力に依存しています。通常、このデータはユーザーまたは他のアプリケーション (Web サービスなど) から取得されます。フィルターを使用すると、アプリケーションが正しい入力タイプを取得できるようになります。
外部データは常にフィルタリングする必要があります。
入力フィルタリングは、アプリケーションのセキュリティの最も重要なトピックの 1 つです。
外部データとは何ですか?入力 ?フォームからの入力データ
?cookie ?Webサービスデータ ?サーバー変數(shù) データベースクエリ結(jié)果
変數(shù)をフィルタリングする必要がある場合は、それを使用してください。次のフィルター関數(shù)のいずれか:
·使用する 使用する 使用する 使用する スルーする スルーする スルーする スルーする スルーする スルーする スルーする スルーする スルーする - 入力変數(shù)を取得してフィルタリングします · filter_input_array - 複數(shù)の入力変數(shù)を取得し、同じまたは異なるフィルタを通してフィルタリングします
次の例では、filter_var() 関數(shù)を使用して整數(shù)を検証します。
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一個合法的整數(shù)"); } else { echo("是個合法的整數(shù)"); } ?>
上記のコードは、「FILTER_VALIDATE_INT」フィルターを使用して変數(shù)をフィルター処理します。この整數(shù)は有効であるため、上記のコードは次のように出力します:
非整數(shù)変數(shù) (「123abc」など) を使用しようとすると、「整數(shù)は無効です」と出力されます。 関數(shù)とフィルターの完全なリストについては、PHP フィルター リファレンス マニュアルをご覧ください。無効化とサニタイズ 2 つのフィルターがあります: 検証フィルター: · ユーザーが入力した
厳密な形式ルール (URL や電子メールの検証など) を検証するために使用されます
· If 成功した場合に期待されるタイプを返します。失敗した場合は FALSE
サニタイズフィルター:
格 · 多數(shù)のデータ形式ルール
· 指定されたフィルターに追加のフィルター オプションを追加するための文字列<?php $var=300; $int_options = array( "options"=>array ( "min_range"=>0, "max_range"=>256 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("不是一個合法的整數(shù)"); } else { echo("是個合法的整數(shù)"); } ?>上記のコードと同様に、オプションは「options」という名前の関連配列に入れる必要があります。 。フラグを使用する場合、フラグを配列にする必要はありません。 整數(shù)は「300」であり、指定された範(fàn)囲內(nèi)にないため、上記のコードの出力は次のようになります: 有効な整數(shù)ではありません 関數(shù)とフィルターの完全なリストについては、PHP フィルター リファレンスを參照してください。マニュアル。各フィルターで使用可能なオプションとフラグを確認(rèn)できます。
入力の検証
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("沒有 email 參數(shù)"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "不是一個合法的 E-Mail"; } else { echo "是一個合法的 E-Mail"; } } ?>上記の例のテスト結(jié)果は次のとおりです:
上記の例には、「GET」メソッドで送信される入力変數(shù)(メール)が含まれています:
1. 「GET」タイプの「メール」入力変數(shù)があるかどうかを検出します2. 入力変數(shù)がある場合。 、有効なメール アドレスであるかどうかを確認(rèn)しますフォームから渡された URL をクリーンアップしてみましょう。
まず、探している入力データが存在することを確認(rèn)します。 次に、filter_input() 関數(shù)を使用して入力データを精製します。 次の例では、入力変數(shù) "url" が PHP ページに渡されます:<?php if(!filter_has_var(INPUT_GET, "url")) { echo("沒有 url 參數(shù)"); } else { $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url; } ?>例の説明 上の例では、入力変數(shù) (url) が "GET" メソッドを通じて渡されます: 1 .「GET」タイプの「url」入力変數(shù)があるかどうかを検出します2. この入力変數(shù)が存在する場合は、それをサニタイズして (不正な文字を削除して)、$url 変數(shù)に格納します 入力変數(shù)が次のような場合この文字列: "http://www.miracleart.cn /" の場合、精製された $url 変數(shù)は次のようになります。
フォームは通常、複數(shù)の入力フィールドで構(gòu)成されます。 filter_var または filter_input 関數(shù)の繰り返し呼び出しを避けるために、filter_var_array または filter_input_array 関數(shù)を使用できます。
この例では、filter_input_array() 関數(shù)を使用して 3 つの GET 変數(shù)をフィルターします。受け取った GET 変數(shù)は、名前、年齢、電子メール アドレスです:
<?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL ); $result = filter_input_array(INPUT_GET, $filters); if (!$result["age"]) { echo("年齡必須在 1 到 120 之間。<br>"); } elseif(!$result["email"]) { echo("E-Mail 不合法<br>"); } else { echo("輸入正確"); } ?>
例の説明
上の例には、「GET」メソッドを介して渡された 3 つの入力変數(shù) (名前、年齢、電子メール) があります:
1. 入力変數(shù)の名前と指定された入力変數(shù)に使用されるフィルターを含む配列を設(shè)定します
2. filter_input_array() 関數(shù)を呼び出します。パラメーターには GET 入力変數(shù)と設(shè)定したばかりの配列が含まれます
3。 $result 変數(shù)を検出する 「age」変數(shù)と「email」変數(shù)に不正な入力はありますか? (不正な入力がある場合、filter_input_array() 関數(shù)の使用後、入力変數(shù)は FALSE になります。)
filter_input_array() 関數(shù)の 2 番目のパラメーターには、配列または単一フィルターの ID を指定できます。
パラメーターが単一フィルターの ID の場合、指定されたフィルターは入力配列內(nèi)のすべての値をフィルター処理します。
パラメータが配列の場合、配列は次のルールに従う必要があります:
· - 配列全體で、値はフィルターの ID、またはフィルター、フラグ、オプションを指定する配列である必要があります
フィルターコールバックの使用
FILTER_CALLBACKフィルターを使用すると、カスタム関數(shù)を呼び出してフィルター用途として使用できます。このようにして、データのフィルタリングを完全に制御できます。
獨(dú)自のカスタム関數(shù)を作成することも、既存の PHP 関數(shù)を使用することもできます。
指定されたオプションの指定方法に応じて、使用するフィルタの機(jī)能を指定します。 「options」という名前の連想配列內(nèi)。
以下の例では、カスタム関數(shù)を使用してすべての「_」をスペースに変換します:
<?php function convertSpace($string) { return str_replace("_", ".", $string); } $string = "www_php_cn!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
上記のコードの結(jié)果は次のとおりです:
例の説明 上記の例では、すべての「_」を「.」に変換します。
1. 「_」を「.」に置き換える関數(shù)を作成します。
2. パラメーターが FILTER_CALLBACK フィルターである関數(shù)を呼び出します。私たちの関數(shù)が含まれています