ホームページ >php教程 >php手册 >PHPフィルタの実装方法 ページ1/2

PHPフィルタの実装方法 ページ1/2

WBOY
WBOYオリジナル
2016-06-13 12:15:08770ブラウズ

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

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

PHP のフィルター拡張機能は、データのフィルター処理を簡単かつ迅速に行うように設計されています。
なぜフィルターを使用するのですか?
ほぼすべての Web アプリケーションは外部入力に依存しています。通常、このデータはユーザーまたは他のアプリケーション (Web サービスなど) から取得されます。フィルターを使用すると、アプリケーションが正しい入力タイプを取得できるようになります。

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

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

外部データとは何ですか?
フォームからの入力データ
Cookie
サーバー変数
データベースクエリ結果
関数とフィルター
変数をフィルターするには、以下のいずれかのフィルター関数を使用します:

filter_var () - 指定したフィルターで単一の変数をフィルターします
filter_var_array() - 同じまたは異なるフィルターで複数の変数をフィルターします
filter_input - 入力変数を取得してフィルターします
filter_input_array - 複数の入力変数を取得してフィルターします同じまたは異なるフィルターを通してそれらを比較します
以下の例では、filter_var() 関数を使用して整数を検証します。

コードをコピー コードは次のとおりです。


$int = 123;

if( !filter_var($int, FILTER_VALIDATE_INT))
{
echo("整数が無効です");
}
else
{
echo("整数は有効です");
}
?>


上記のコードは、「FILTER_VALIDATE_INT」フィルターを使用して変数をフィルター処理します。この整数は有効であるため、コードの出力は「整数は有効です」となります。

整数以外の変数を使用しようとすると、「整数が無効です」という出力が表示されます。

関数とフィルターの完全なリストについては、PHP フィルター リファレンス マニュアルを参照してください。
検証とサニタイズ
フィルターには次の 2 種類があります:

検証フィルター:
ユーザー入力の検証に使用されます
厳密な形式ルール (URL や電子メールの検証など)
成功した場合は予期されたタイプを返し、それ以外の場合は FALSE を返します
サニタイズフィルター:
文字列内の指定された文字を許可または禁止するために使用されます
データ形式規則はありません
常に文字列を返します
オプションとフラグ
オプションとフラグは、指定されたフィルターに追加のフィルター オプションを追加するために使用されます。

フィルターが異なれば、オプションとフラグも異なります。

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

コードをコピーコードは次のとおりです:


$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」であり、指定された雰囲気内にないため、上記のコードの出力は「整数が無効です」となります。

関数とフィルターの完全なリストについては、W3School が提供する PHP フィルター リファレンス マニュアルを参照してください。各フィルターで使用可能なオプションとフラグを確認できます。
入力の検証
フォームからの入力を検証してみましょう。

最初に行う必要があるのは、探している入力データが存在することを確認することです。

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

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



コードをコピーします

コードは次のとおりです。 : if(!filter_has_var(INPUT_GET, "メール"))

{
echo("入力タイプが存在しません"); }
else
{
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
{
echo "電子メールが無効です"
}
; else
{
echo "電子メールは有効です"
}
}
?>;
例の説明:
上記の例には、「GET」メソッドを通じて送信される入力変数 (電子メール) があります。

タイプ「GET」の「電子メール」入力変数があるかどうかを検出します。
入力変数がある場合は、それが有効な電子メール アドレスであるかどうかを確認します
入力をサニタイズします
フォームから渡された URL をクリーンアップしてみましょう。

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

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

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

コードをコピーします コードは次のとおりです。 :


if(!filter_has_var(INPUT_POST, "url"))
{
echo("入力タイプが存在しません"); }
else
{
$url = filter_input(INPUT_POST,
"url", FILTER_SANITIZE_URL);
}
?> :
上記の例には、「POST」メソッドを通じて送信される入力変数 (url) があります。

タイプ「POST」の「url」入力変数があるかどうかを検出します。
この入力変数の場合存在する場合は、サニタイズ (不正な文字を削除) して $url 変数に保存します
入力変数が次のような場合: "http://www.W3#$%S^%$#ool.com.cn /"、精製後 $url 変数は次のようになります。

http://www.W3School.com.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" => ; 配列
(
"フィルター"=>FILTER_VALIDATE_INT,
"オプション"=>配列
(
"min_range"=>1,
"max_range" => ;120
)
),
"email"=>,
);

$result = filter_input_array(INPUT_GET, $filters); 🎜> if (!$result["age"])
{
echo("年齢は 1 から 120 までの数値である必要があります。
");
elseif (! $result["email"])
{
echo("電子メールが無効です。
")
}
else
{
echo ("ユーザー入力は有効です");
}
?>


上の例には 3 つの入力変数があります (name 、 age 、 email)

入力変数の名前を含む配列と、指定された入力変数のフィルターを設定します
filter_input_array 関数を呼び出します。パラメーターには GET 入力変数と設定したばかりの配列が含まれます
$result変数の「age」変数と「email」変数に不正な入力がないか確認してください。 (不正な入力がある場合)
filter_input_array() 関数の 2 番目のパラメーターには、配列または単一フィルターの ID を指定できます。


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

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

は、配列のキーである入力変数 (「年齢」など) を含む連想配列でなければなりません。 " 入力変数 )
この配列の値はフィルターの ID、またはフィルター、フラグ、オプションを指定する配列である必要があります
フィルター コールバックを使用する
FILTER_CALLBACK フィルターを使用すると、カスタム関数を呼び出すことができますフィルターとして機能します。このようにして、データのフィルタリングを完全に制御できます。

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

オプションを指定するのと同じ方法で、フィルターに使用する関数を指定します。

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



コードをコピー

コードは次のとおりです。 🎜>

function ConvertSpace($string)

{ return str_replace("_", " ", $string); $string = "Peter_is_a_great_guy!";

echo filter_var($string, FILTER_CALLBACK,

array("options"=>"convertSpace"));


上記のコードの結果は次のようになります:

Peter is a great guy! 例の説明:
上記の例はすべての "_" をスペースに変換します:

「_」をスペースに置き換える関数を作成します
filter_var() 関数を呼び出します。そのパラメーターは FILTER_CALLBACK フィルターと関数を含む配列です


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。