PHPフィルター
PHP フィルター
PHP フィルターは、ユーザー入力などの安全でないソースからのデータを検証し、フィルターするために使用されます。
PHPフィルターとは何ですか?
PHP フィルターは、安全でないソースからのデータを検証およびフィルターするために使用されます。
ユーザー入力またはカスタム データのテスト、検証、フィルタリングは、Web アプリケーションの重要な部分です。
PHP のフィルター拡張機能は、データのフィルター処理を簡単かつ高速にするように設計されています。
なぜフィルターを使用するのですか?
ほぼすべての Web アプリケーションは外部入力に依存しています。このデータは通常、ユーザーまたは他のアプリケーション (Web サービスなど) から取得されます。フィルターを使用すると、アプリケーションが正しい入力タイプを取得できるようになります。
外部データは常にフィルタリングする必要があります。
入力フィルタリングは、アプリケーションのセキュリティの最も重要なトピックの 1 つです。
外部データとは何ですか?入力 ・フォームからの入力データ ・cookie
・Webサービスデータ
・サーバー変数
データベースクエリ結果
変数をフィルタリングする必要がある場合は、それを使用してください。次のフィルター関数の: ·使用する 使用する 使用する 使用する スルー 使用する スルー 使用する スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー - 入力変数を取得してフィルタリングします· filter_input_array - 複数の入力変数を取得し、同じまたは異なるフィルタを通してフィルタリングします
次の例では、filter_var() 関数を使用して整数を確認します。<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
上記のコードは、「FILTER_VALIDATE_INT」フィルターを使用して変数をフィルター処理します。この整数は正当であるため、上記のコードは次のように出力します:
は正当な整数です
非整数変数 (「123abc」など) を使用しようとすると、次のように出力されます: 「整数は無効です」 」。 関数とフィルターの完全なリストについては、PHP フィルター リファレンス マニュアルをご覧ください。 vallidating and Sanitizingには2つのフィルターがあります。. 文字列
オプションとフラグ
オプションとフラグは、指定されたフィルターに追加のフィルター オプションを追加するために使用されます。
異なるフィルターには異なるオプションとフラグがあります。
以下の例では、「min_range」および「max_range」オプションを指定した filter_var() を使用して整数を検証しています。 <?php
$var=300;
$int_options = array(
"options"=>array
(
"min_range"=>0,
"max_range"=>256
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{
echo("不是一个合法的整数");
}
else
{
echo("是个合法的整数");
}
?>
上記のコードと同様に、オプションは「options」という名前の関連配列に入れる必要があります。 。フラグを使用する場合、フラグを配列にする必要はありません。 整数は「300」であり、指定された範囲内にないため、上記のコードの出力は次のようになります:
有効な整数ではありません
関数とフィルターの完全なリストについては、PHP フィルター リファレンスを参照してください。マニュアル。各フィルターで使用可能なオプションとフラグを確認できます。
入力を検証する
フォームからの入力を検証してみましょう。
最初に行う必要があるのは、探している入力データが存在することを確認することです。
次に、filter_input() 関数を使用して入力データをフィルターします。 次の例では、入力変数「email」が PHP ページに渡されます: <?php
if(!filter_has_var(INPUT_GET, "email"))
{
echo("没有 email 参数");
}
else
{
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
{
echo "不是一个合法的 E-Mail";
}
else
{
echo "是一个合法的 E-Mail";
}
}
?>
上記の例のテスト結果は次のとおりです:
は正当な電子メールです
例上記の例は、「GET」メソッドで送信される入力変数(メール)です: 1. 「GET」タイプの「メール」入力変数があるかどうかを検出します
2. 入力変数が存在する場合、有効なメールアドレスかどうかを確認してください
入力をサニタイズしてください
フォームから渡された URL をクリーンアップしてみましょう。
まず、探している入力データが存在することを確認します。
次に、filter_input() 関数を使用して入力データを精製します。
次の例では、入力変数 "url" が PHP ページに渡されます:
<?php if(!filter_has_var(INPUT_GET, "url")) { echo("没有 url 参数"); } else { $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url; } ?>
例の説明
上の例では、入力変数 (url) が "GET" メソッドを通じて渡されます:
1 .「GET」タイプの「url」入力変数があるかどうかを検出します
2. この入力変数が存在する場合は、それをサニタイズして (不正な文字を削除して)、$url 変数に格納します
入力変数が次のような場合この文字列: "http://www.pφhΞp.cn/" の場合、精製された $url 変数は次のようになります:
http://www.php.cn/
複数の入力をフィルタリングしますフォームは通常、複数の入力フィールドで構成されます。 filter_var または filter_input 関数の繰り返し呼び出しを避けるために、filter_var_array または filter_input_array 関数を使用できます。
この例では、filter_input_array() 関数を使用して 3 つの GET 変数をフィルターします。受け取った GET 変数は、名前、年齢、電子メール アドレスです:
<?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 つの入力変数 (名前、年齢、電子メール) があります:
1. 入力変数の名前と指定された入力変数に使用されるフィルターを含む配列を設定します
2. filter_input_array() 関数を呼び出します。パラメーターには GET 入力変数と設定したばかりの配列が含まれます
3。 $result 変数を検出する 「age」変数と「email」変数に不正な入力はありますか? (不正な入力がある場合、filter_input_array() 関数の使用後、入力変数は FALSE になります。)
filter_input_array() 関数の 2 番目のパラメーターには、配列または単一フィルターの ID を指定できます。
パラメーターが単一フィルターの ID の場合、指定されたフィルターは入力配列内のすべての値をフィルター処理します。 parameterパラメーターが配列である場合、配列は次のルールに従う必要があります。
FILTER_CALLBACK フィルターを使用すると、カスタム関数を呼び出してフィルターとして使用できます。このようにして、データのフィルタリングを完全に制御できます。
独自のカスタム関数を作成することも、既存の PHP 関数を使用することもできます。
指定されたオプションの指定方法に応じて、使用するフィルタの機能を指定します。 「options」という名前の連想配列内。
以下の例では、カスタム関数を使用してすべての「_」をスペースに変換します:
<?php function convertSpace($string) { return str_replace("_", ".", $string); } $string = "www_runoob_com!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
上記のコードの結果は次のとおりです:
例の説明
上記の例は、すべての「_」を変換します。 _" Convert to ".":
1. "_" を "." に置き換える関数を作成します
2. パラメーターが FILTER_CALLBACK フィルターと関数を含む配列である filter_var() 関数を呼び出します