フィルター

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 フィルター リファレンス マニュアルをご覧ください。無効化とサニタイズ

2 つのフィルターがあります:

検証フィルター:

QQ截图20161009095342.png · ユーザーが入力した

厳密な形式ルール (URL や電子メールの検証など) を検証するために使用されます

· If 成功した場合に期待されるタイプを返します。失敗した場合は FALSE

サニタイズフィルター:

· 文字列内の指定された文字を許可または禁止するために使用されます

格 · 多数のデータ形式ルール

· 指定されたフィルターに追加のフィルター オプションを追加するための文字列


オプションとロゴ オプションとロゴを常に返します。

異なるフィルターには異なるオプションとフラグがあります。

以下の例では、「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";
         }
}
?>

上記の例のテスト結果は次のとおりです:


QQ截图20161009095013.png

例の説明

上記の例には、「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 変数に格納します

入力変数が次のような場合この文字列: "//m.sbmmt.com /" の場合、精製された $url 変数は次のようになります。

フォームは通常、複数の入力フィールドで構成されます。 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 の場合、指定されたフィルターは入力配列内のすべての値をフィルター処理します。

パラメータが配列の場合、配列は次のルールに従う必要があります:

· - 配列全体で、値はフィルターの ID、またはフィルター、フラグ、オプションを指定する配列である必要があります


フィルターコールバックの使用

FILTER_CALLBACKフィルターを使用すると、カスタム関数を呼び出してフィルター用途として使用できます。このようにして、データのフィルタリングを完全に制御できます。

独自のカスタム関数を作成することも、既存の PHP 関数を使用することもできます。

指定されたオプションの指定方法に応じて、使用するフィルタの機能を指定します。 「options」という名前の連想配列内。

以下の例では、カスタム関数を使用してすべての「_」をスペースに変換します:

<?php
function convertSpace($string)
{
         return str_replace("_", ".", $string);
}
 
$string = "www_php_cn!";
 
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>

上記のコードの結果は次のとおりです:

QQ截图20161009095054.png


例の説明 上記の例では、すべての「_」を「.」に変換します。

1. 「_」を「.」に置き換える関数を作成します。

2. パラメーターが FILTER_CALLBACK フィルターである関数を呼び出します。私たちの関数が含まれています

学び続ける
||
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜