PHPフィルター2024 年の最新の入門チュートリアル。このコースでは PHPフィルターとは何ですか?,なぜフィルタを使うのか?,関数とフィルタ,検証および消毒,オプションとフラグ,入力の検証,例について説明しました,精製入力,例について説明しました,入力フィルタの複数,例について説明しました,フィルターのコールバックを使用します,例について説明しました, について学習できます。

PHPフィルター

PHPフィルタを検証し、ユーザ入力として安全でないソースからフィルタデータをするために使用されます。


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

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

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

PHPフィルタの拡張は、データが簡単かつ迅速フィルタリングするように設計されています。


なぜフィルタを使うのか?

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

あなたは常に外部データのフィルタリングすべき!

入力フィルタリングは、最も重要なアプリケーションのセキュリティ上の問題です。

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

  • フォームからの入力データ
  • クッキー
  • Webサービス・データ
  • サーバー変数
  • データベースのクエリ結果

関数とフィルタ

変数をフィルタリングするには、次のフィルタ機能のいずれかを使用します。

  • filter_var() - 指定したフィルタにより、単一の変数をフィルタリングします
  • filter_var_array() - 同一または異なるフィルタによって複数の変数をフィルタリングします
  • filter_input - 1入力変数を取得し、それをフィルタ
  • filter_input_array - 複数の入力変数を取得し、同一または異なるフィルタによってそれらをフィルタリングします

次の例では、我々はにfilter_var()関数を使用し、整数を検証します:

<?php
$int = 123;

if(!filter_var($int, FILTER_VALIDATE_INT))
{
	echo("不是一个合法的整数");
}
else
{
	echo("是个合法的整数");
}
?>

上記のコードは、変数をフィルタリングする「FILTER_VALIDATE_INT」フィルタを使用しています。 整数が正当なものであるので、ので、上記のコードが出力されます:

私たちは(そのような "123ABC"のような)非整数の変数を使用しようとすると、出力は次のとおりです。「整数が有効ではありません」。

機能やフィルタの完全なリストについては、私たちの訪問PHPフィルタのリファレンスマニュアルを


検証および消毒

フィルタの2種類があります。

フィルタを検証:

  • ユーザー入力を検証するために使用
  • (URLまたはEメールの確認など)厳格な書式ルール
  • 成功した場合、期待される戻り値の型は、それはFALSEを返すに失敗した場合

消毒のフィルタ:

  • これは、指定した文字列を許可または禁止するために使用しました
  • いいえデータ書式ルールはありません
  • 常に文字列を返します

オプションとフラグ

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

異なるフィルタは、さまざまなオプションとフラグを持っています。

次の例では、整数を検証するためにfilter_var()と「min_range」と「MAX_RANGE」オプションを使用します。

<?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("是个合法的整数");
}
?>

上記のコードのように、関連するオプションは、「オプション」で呼ばれる配列に配置する必要がありますように。 フラグは、アレイ内で必要とされていない場合。

整数が「300」であるので、それは指定された範囲内ではない、上記のコードの出力は次のようになります。

不是一个合法的整数

機能やフィルタの完全なリストについては、私たちの訪問PHPフィルタのリファレンスマニュアルを 。 あなたは、各フィルタとフラグで使用可能なオプションを見ることができます。


入力の検証

フォームからの入力を検証してみましょう。

私たちは、まず最初に、入力データは、我々が探していることを確認することです行う必要があります。

その後、我々は、入力されたデータをフィルタリングするfilter_input()関数を使用します。

以下の例では、入力変数「電子メール」は、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;
}
?>

例について説明しました

1入力変数(URL)によって、上記の例は "GET"メソッドを送信:

  1. 「URL」の入力変数「GET」タイプの存在を検出します
  2. 入力変数が存在する場合は、その精製は、(不正な文字を削除)、および$ url変数に格納します

入力変数は、このような文字列である場合:「http://www.ruaanoob.com/ "次のように、精製後の$ url変数は、次のとおりです。



入力フィルタの複数

フォームは、多くの場合、複数の入力フィールドで構成されています。 繰り返し呼び出さにfilter_varまたはfilter_input機能を回避するために、我々はfilter_input_arrayのfilter_var_arrayまたは機能を使用することができます。

ここでは、3 GET変数をフィルタリングするfilter_input_array()関数を使用します。 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. GET変数とだけ設定し、アレイコールfilter_input_array含む()関数、入力パラメータ、
  3. 検出$結果変数「年齢」と「電子メール」の入力変数は違法です。 (不正な入力がある場合は、使用filter_input_array()関数の後に、入力変数はFALSEです。)

filter_input_array()関数の2番目の引数は、配列または単一のフィルタIDすることができます。

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

このパラメータが配列の場合、配列は次の規則を遵守しなければなりません。

  • でなければならない入力変数を含む連想配列は、(例えば、「年齢」は、入力変数として)配列のキーであります
  • この配列の値は、フィルタのID、またはフィルタ、フラグやオプションの配列の規定でなければなりません

フィルターのコールバックを使用します

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

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

あなたはこの方法を所定の規定指定されたオプションに応じて、フィルタ機能を使用できるようになります。 名前「オプション」を連想配列で。

次の例では、我々はスペースに変換 "_"すべてのカスタム関数を使用します。

<?php
function convertSpace($string)
{
	return str_replace("_", ".", $string);
}

$string = "www_w3big_com!";

echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>

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

例について説明しました

上記の例は、すべて "_"に ""。:

  1. 「_」に置き換えられて「。」関数を作成するには
  2. パラメータは、私たちの関数を含むFILTER_CALLBACKフィルタと配列されているコールにfilter_var()関数、
PHPフィルター
10/30