PHPフィルター
PHP フィルター
PHP フィルターは、ユーザー入力などの安全でないソースからのデータを検証し、フィルターするために使用されます。
PHPフィルターとは何ですか?
PHP フィルターは、安全でないソースからのデータを検証およびフィルターするために使用されます。
ユーザー入力またはカスタム データのテスト、検証、フィルタリングは、Web アプリケーションの重要な部分です。
PHP のフィルター拡張機(jī)能は、データのフィルター処理を簡単かつ高速にするように設(shè)計(jì)されています。
なぜフィルターを使用するのですか?
ほぼすべての Web アプリケーションは外部入力に依存しています。このデータは通常、ユーザーまたは他のアプリケーション (Web サービスなど) から取得されます。フィルターを使用すると、アプリケーションが正しい入力タイプを取得できるようになります。
外部データは常にフィルタリングする必要があります。
入力フィルタリングは、アプリケーションのセキュリティの最も重要なトピックの 1 つです。
外部データとは何ですか?入力 ?フォームからの入力データ ?cookie
?Webサービスデータ
?サーバー変數(shù)
データベースクエリ結(jié)果
変數(shù)をフィルタリングする必要がある場合は、それを使用してください。次のフィルター関數(shù)の: ·使用する 使用する 使用する 使用する スルー 使用する スルー 使用する スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー - 入力変數(shù)を取得してフィルタリングします· filter_input_array - 複數(shù)の入力変數(shù)を取得し、同じまたは異なるフィルタを通してフィルタリングします
次の例では、filter_var() 関數(shù)を使用して整數(shù)を確認(rèn)します。<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一個(gè)合法的整數(shù)"); } else { echo("是個(gè)合法的整數(shù)"); } ?>
上記のコードは、「FILTER_VALIDATE_INT」フィルターを使用して変數(shù)をフィルター処理します。この整數(shù)は正當(dāng)であるため、上記のコードは次のように出力します:
は正當(dāng)な整數(shù)です
非整數(shù)変數(shù) (「123abc」など) を使用しようとすると、次のように出力されます: 「整數(shù)は無効です」 」。 関數(shù)とフィルターの完全なリストについては、PHP フィルター リファレンス マニュアルをご覧ください。 vallidating and Sanitizingには2つのフィルターがあります。. 文字列
オプションとフラグ
オプションとフラグは、指定されたフィルターに追加のフィルター オプションを追加するために使用されます。
異なるフィルターには異なるオプションとフラグがあります。
以下の例では、「min_range」および「max_range」オプションを指定した filter_var() を使用して整數(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("不是一個(gè)合法的整數(shù)");
}
else
{
echo("是個(gè)合法的整數(shù)");
}
?>
上記のコードと同様に、オプションは「options」という名前の関連配列に入れる必要があります。 。フラグを使用する場合、フラグを配列にする必要はありません。 整數(shù)は「300」であり、指定された範(fàn)囲內(nèi)にないため、上記のコードの出力は次のようになります:
有効な整數(shù)ではありません
関數(shù)とフィルターの完全なリストについては、PHP フィルター リファレンスを參照してください。マニュアル。各フィルターで使用可能なオプションとフラグを確認(rèn)できます。
入力を検証する
フォームからの入力を検証してみましょう。
最初に行う必要があるのは、探している入力データが存在することを確認(rèn)することです。
次に、filter_input() 関數(shù)を使用して入力データをフィルターします。 次の例では、入力変數(shù)「email」が PHP ページに渡されます: <?php
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";
}
}
?>
上記の例のテスト結(jié)果は次のとおりです:
は正當(dāng)な電子メールです
例上記の例は、「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.pφhΞp.cn/" の場合、精製された $url 変數(shù)は次のようになります:
http://www.miracleart.cn/
複數(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)のすべての値をフィルター処理します。 parameterパラメーターが配列である場合、配列は次のルールに従う必要があります。
FILTER_CALLBACK フィルターを使用すると、カスタム関數(shù)を呼び出してフィルターとして使用できます。このようにして、データのフィルタリングを完全に制御できます。
獨(dú)自のカスタム関數(shù)を作成することも、既存の PHP 関數(shù)を使用することもできます。
指定されたオプションの指定方法に応じて、使用するフィルタの機(jī)能を指定します。 「options」という名前の連想配列內(nèi)。
以下の例では、カスタム関數(shù)を使用してすべての「_」をスペースに変換します:
<?php function convertSpace($string) { return str_replace("_", ".", $string); } $string = "www_runoob_com!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
上記のコードの結(jié)果は次のとおりです:
例の説明
上記の例は、すべての「_」を変換します。 _" Convert to ".":
1. "_" を "." に置き換える関數(shù)を作成します
2. パラメーターが FILTER_CALLBACK フィルターと関數(shù)を含む配列である filter_var() 関數(shù)を呼び出します