PHPフィルターLOGIN

PHPフィルター

PHP フィルターは、ユーザー入力などの安全でないソースからのデータを検証およびフィルターするために使用されます。


PHPフィルターとは何ですか?

PHP フィルターは、安全でないソースからのデータを検証およびフィルターするために使用されます。

ユーザー入力またはカスタム データのテスト、検証、フィルタリングは、Web アプリケーションの重要な部分です。

PHP のフィルター拡張機能は、データのフィルター処理を簡単かつ高速にするように設計されています。


なぜフィルターを使用するのですか?

ほとんどすべての Web アプリケーションは外部入力に依存しています。このデータは通常、ユーザーまたは他のアプリケーション (Web サービスなど) から取得されます。フィルターを使用すると、アプリケーションが正しい入力タイプを取得できるようになります。

外部データは常にフィルタリングする必要があります。

入力フィルタリングは、アプリケーションのセキュリティに関する最も重要なトピックの 1 つです。

外部データとは何ですか?

・フォームからの入力データ

・Cookie

・Webサービスデータ

・サーバー変数

・データベースクエリ結果


関数とフィルター

変数をフィルターするには、次を使用します次のフィルター関数のいずれか:

filter_var

() - 指定されたフィルターで単一の変数をフィルターします

filter_var_array

() - 同じまたは異なるフィルターでフィルターして複数の変数をフィルターします

filter_input

- 入力変数を取得してフィルターします

· filter_input_array

- 複数の入力変数を取得して、同じまたは異なるフィルターでフィルターします


で次の例では、filter_var() 関数を使用して整数を検証します。

ILTER_VALIDATE_INT

Filter は整数を検証値として受け取ります。

<?php
header("Content-type:text/html;charset=utf-8");
$int = 123;

if(!filter_var($int, FILTER_VALIDATE_INT))
{
    echo("不是一个合法的整数");
}
else
{
    echo("是个合法的整数");
}
?>
プログラムの実行結果:

は有効な整数です

関数とフィルターの完全なリストについては、PHP フィルター リファレンス マニュアルを参照してください。


検証とサニタイズ

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

検証

フィルター:

・ユーザー入力の検証に使用されます・厳密なフォーマット規則 (URL や電子メールの検証など)

· 成功した場合は予期されたタイプを返し、失敗した場合は FALSE を返します

サニタイジング

フィルター:

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

・データ形式の規則はありません

・常に文字列を返します


オプションとフラグ

オプションとフラグは、指定されたフィルターに追加のフィルターオプションを追加するために使用されます。

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


以下の例では、「min_range」および「max_range」オプションを指定した filter_var() を使用して整数を検証しています。

<?php
header("Content-type:text/html;charset=utf-8");
$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」がGETメソッドに入力され、PHPページに渡されます:

<?php
header("Content-type:text/html;charset=utf-8");
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";
    }
}
?>

プログラムの実行結果:

6.png

例の説明

上の例では、「GET」メソッドを通じて送信される入力変数 (メール) があります:

1. 「GET」タイプの「メール」入力変数があるかどうかを検出します

2。入力変数がある場合は、有効な電子メール アドレスであるかどうかを確認します


入力をサニタイズします

フォームから渡された URL をクリーンアップしてみましょう。

まず、探している入力データが存在することを確認します。

次に、filter_input() 関数を使用して入力データを精製します。


インスタンス

次の例では、入力変数 "url" が PHP ページに渡されます:

<?php
header("Content-type:text/html;charset=utf-8");
if(!filter_has_var(INPUT_GET, "url"))
{
    echo("没有 url 参数");
}
else
{
    $url = filter_input(INPUT_GET,
        "url", FILTER_SANITIZE_URL);
    echo $url;
}
?>

説明

FILTER_SANITIZE_URL フィルターは、文字列内のすべての不正な URL 文字を削除します。

上記の例には、「GET」メソッドを通じて送信される入力変数 (url) があります:

1. 「GET」タイプの「url」入力変数があるかどうかを検出します

2. この入力変数が存在する場合は、次の処理を実行します。精製して (不正な文字を削除して) $url 変数に保存します

入力変数が「http://www.ruåånoøøob.com/」のような文字列の場合、精製された $url 変数は次のようになります。表示:

7.png


複数の入力のフィルタリング

フォームは通常、複数の入力フィールドで構成されます。 filter_var または filter_input 関数の繰り返し呼び出しを避けるために、filter_var_array または filter_input_array 関数を使用できます。

filter_input_array() 関数を使用して 3 つの GET 変数をフィルターします。受信した GET 変数は、名前、年齢、電子メール アドレスです:

<?php
header("Content-type:text/html;charset=utf-8");
$filters = array
(
    "name" => array
    (
        "filter_has_var"=>FILTER_SANITIZE_STRING
    ),
    "age" => array
    (
        "filter_has_var"=>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("输入正确");
}
?>

プログラムの実行結果:

8.png

例の説明

上記の例では、「GET」メソッドを通じて 3 つが送信されています。入力変数 (名前、年齢、電子メール):

1. 入力変数の名前と指定された入力変数のフィルターを含む配列を設定します

2. filter_input_array() 関数を呼び出し、パラメーターには GET が含まれます。入力変数 そして、設定したばかりの配列

3. $result 変数の "age" 変数と "e​​mail" 変数に不正な入力がないか確認します。 (不正な入力がある場合、filter_input_array() 関数の使用後、入力変数は FALSE になります。)

filter_input_array() 関数の 2 番目のパラメーターには、配列または単一フィルターの ID を指定できます。

パラメーターが単一フィルターの ID の場合、指定されたフィルターは入力配列内のすべての値をフィルター処理します。

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

· 連想配列である必要があり、それに含まれる入力変数は配列のキー (「年齢」など)入力変数)

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


フィルターコールバックを使用する

FILTER_CALLBACK フィルターはユーザー定義関数を使用して値をフィルターします

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

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

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

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

<?php
header("Content-type:text/html;charset=utf-8");
function convertSpace($string)
{
    return str_replace("_", ".", $string);
}
$string = "www_php_cn!";
echo filter_var($string, FILTER_CALLBACK,
    array("options"=>"convertSpace"));
?>

プログラムの実行結果:

cn!

例の説明

上記の例は、すべての「_」を「.」に変換します:

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

2. filter_var() 関数、そのパラメーターは FILTER_CALLBACK フィルターと関数を含む配列です


次のセクション

<?php header("Content-type:text/html;charset=utf-8"); $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
コースウェア