PHP 初心者向けのフィルター
1.php フィルター
PHP フィルターは、ユーザー入力などの安全でないソースからのデータを検証し、フィルターするために使用されます。
2. PHP フィルターとは
PHP フィルターは、安全でないソースからのデータを検証し、フィルターするために使用されます。
ユーザー入力またはカスタム データのテスト、検証、フィルタリングは、Web アプリケーションの重要な部分です。 PHP のフィルター拡張機(jī)能は、データのフィルター処理を簡単かつ高速にするように設(shè)計(jì)されています
3. フィルターを使用する理由
ほぼすべての Web アプリケーションは外部入力に依存しています。通常、このデータはユーザーまたは他のアプリケーション (Web サービスなど) から取得されます。フィルターを使用すると、アプリケーションが正しい入力タイプを確実に取得できるようになります
外部データをフィルターするとセキュリティが向上します。それでは、どのような外部データがあるでしょうか?
(1).フォームからの入力データ
(2).Cookie
(3).Webサービスデータ
(4).サーバー変數(shù)
(5).データベースクエリ結(jié)果
関數(shù)とフィルター
変數(shù)をフィルターするには、次のフィルター関數(shù)のいずれかを使用します:
filter_var() - 指定したフィルターで単一の変數(shù)をフィルターします
filter_var_array() - 同じまたは異なるフィルターでフィルターします 複數(shù)の変數(shù)をフィルターするフィルター
filter_input - 入力変數(shù)を取得し、それをフィルターします
filter_input_array - 複數(shù)の入力変數(shù)を取得し、同じまたは異なるフィルターを通してそれらをフィルターします
<?php header("Content-type: text/html; charset=utf-8");//設(shè)置編碼 $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)){ echo("不是一個(gè)合法的整數(shù)"); }else{ echo("是個(gè)合法的整數(shù)"); } ?>
注: 有効な整數(shù)を記述すると、出力は有効な整數(shù)になります。そうでない場合、出力は有効な整數(shù)ではありません。
検証とサニタイズ これらは 2 種類のフィルタです
検証フィルタ:
ユーザー入力を検証するために使用されます
厳密な書式設(shè)定ルール (URL や電子メールの検証など)
成功した場合は予期された型を返し、失敗した場合は FALSE を返します
サニタイズフィルター:
文字列內(nèi)の指定された文字を許可または禁止するために使用します
データ形式規(guī)則はありません
常に文字列を返します
オプションとフラグ
オプションとフラグは、指定されたフィルターに追加のフィルター オプションを追加するために使用されます。
異なるフィルターには異なるオプションとフラグがあります
<?php header("Content-type: text/html; charset=utf-8");//設(shè)置編碼 $var=300; $int_options = array( "options"=>array( "min_range"=>0, "max_range"=>256 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)){ echo("不是一個(gè)合法的整數(shù)"); }else{ echo("是個(gè)合法的整數(shù)"); } ?>
注: 上記のコードと同様に、オプションは「options」と呼ばれる関連する配列に入れる必要があります。フラグを使用する場合、フラグを配列にする必要はありません。整數(shù)が「300」なので指定範(fàn)囲外です
入力の検証
フォームからの入力を検証してみましょう。
最初に行う必要があるのは、探している入力データが存在することを確認(rèn)することです。
次に、filter_input() 関數(shù)を使用して入力データをフィルターします。
以下の例では、入力変數(shù)「email」がPHPページに渡されます
<?php header("Content-type: text/html; charset=utf-8");//設(shè)置編碼 if(!filter_has_var(INPUT_GET, "email")){ echo("沒有 email 參數(shù)"); }else{ if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)){ echo "不是一個(gè)合法的 E-Mail"; }else{ echo "是一個(gè)合法的 E-Mail"; } } ?>
注: フォームがデータを送信する際には、まずgetでデータが送信されているかどうかを確認(rèn)します
その後、データが送信されているかどうかを判斷します
??正規(guī)のメールです ??入力のサニタイズ
フォームから渡されたURLをサニタイズしてみましょう。
まず、探している入力データが存在することを確認(rèn)します。
次に、filter_input() 関數(shù)を使用して入力データを精製します。
次の例では、入力変數(shù)「url」が PHP ページに渡されます:
<?php header("Content-type: text/html; charset=utf-8");//設(shè)置編碼 if(!filter_has_var(INPUT_GET, "url")){ echo("沒有 url 參數(shù)"); }else{ $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url; } ?>
注: 「GET」タイプの「url」入力変數(shù)があるかどうかを確認(rèn)してください。
この入力変數(shù)が存在する場合は、それをサニタイズ(不正な文字を削除)し、$url変數(shù)に保存します