PHPフィルター(フィルター)の関連知識

jacklove
リリース: 2023-03-25 15:04:01
オリジナル
1471 人が閲覧しました

PHP Filter は、ユーザー入力などの安全でないソースからのデータを検証およびフィルターするために使用されます。この記事では、フィルターについて詳しく説明します。

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

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

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

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

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

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

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

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

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

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

Cookie

サーバー変数

データベースクエリ結果

関数とフィルター

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

filter_var() - フィルターするフィルターを指定します。単一の変数

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

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

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

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

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>
ログイン後にコピー

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

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

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

検証とサニタイズ

フィルターには 2 つのタイプがあります:

検証フィルター:

ユーザー入力の検証に使用されます

厳密な書式設定ルール (URL や電子メールの検証など)

成功した場合は期待されるタイプを返します失敗した場合は 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("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>
ログイン後にコピー

上記のコードと同様に、オプションは「options」という名前の関連配列に入れる必要があります。 。フラグを使用する場合、フラグを配列にする必要はありません。

整数が「300」で指定範囲外のため、上記コードの出力は「整数が無効です」となります。

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

入力の検証

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

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

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

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

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Input type does not exist");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail is not valid";
  }
 else
  {
  echo "E-Mail is valid";
  }
 }
?>
ログイン後にコピー

例の説明:

上記の例では、入力変数 (email) が「GET」メソッドを介して渡されます:

「GET」タイプの「email」入力変数が存在するかどうかを確認します

入力変数が存在する場合は、それが有効なメールアドレスであるかどうかを確認します

入力をサニタイズします

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

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

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

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

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Input type does not exist");
 }
else
 {
 $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
 }
?>
ログイン後にコピー

例の説明:

上記の例では、入力変数 (url) が「POST」メソッドを介して渡されます:

「POST」タイプの「url」入力変数が存在するかどうかを確認します

この入力変数が存在する場合は、それをサニタイズ(不正な文字を削除)し、$url 変数に保存します

入力変数が次のようであれば、「http: // www.W3 不正な ol.com.c 文字 n/" の場合、精製された $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" => 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("Age must be a number between 1 and 120.<br />");
 }
elseif(!$result["email"])
 {
 echo("E-Mail is not valid.<br />");
 }
else
 {
 echo("User input is valid");
 }
?>
ログイン後にコピー

例子解释:

上面的例子有三个通过 "GET" 方法传送的输入变量 (name, age and email)

设置一个数组,其中包含了输入变量的名称,以及用于指定的输入变量的过滤器

调用 filter_input_array 函数,参数包括 GET 输入变量及刚才设置的数组

检测 $result 变量中的 "age" 和 "email" 变量是否有非法的输入。(如果存在非法输入,)

filter_input_array() 函数的第二个参数可以是数组或单一过滤器的 ID。

如果该参数是单一过滤器的 ID,那么这个指定的过滤器会过滤输入数组中所有的值。

如果该参数是一个数组,那么此数组必须遵循下面的规则:

必须是一个关联数组,其中包含的输入变量是数组的键(比如 "age" 输入变量)

此数组的值必须是过滤器的 ID ,或者是规定了过滤器、标志以及选项的数组

使用 Filter Callback

通过使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。

您可以创建自己的自定义函数,也可以使用已有的 PHP 函数。

规定您准备用到过滤器函数的方法,与规定选项的方法相同。

在下面的例子中,我们使用了一个自定义的函数把所有 "_" 转换为空格:

<?phpfunction 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 过滤器以及包含我们的函数的数组。

本篇对过滤器进行了讲解,更多的学习资料清关注php中文网即可观看。

相关推荐:

关于对PHP 异常处理的操作

关于PHP 文件打开/读取/读取相关知识

关于PHP Include 文件的讲解

以上がPHPフィルター(フィルター)の関連知識の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート