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