従来、ユーザーは主にインターネットを通じて情報を取得していました。今日のインターネットでは、ユーザーは単なる Web サイトの閲覧者ではなく、Web サイトのコンテンツの作成者でもあります。これまでの単純な「読む」から「書く」「共創」へ、受動的に情報を受け取るだけから能動的に情報を分岐させるへと発展しました。それに伴うセキュリティ問題は、Web 開発者にとって無視できない問題となっており、サードパーティ ソースからのデータを検証することは、すべての Web プログラムにとって不可欠な機能となっています。
以前は、PHP ではデータを検証する必要があり、正規表現を使用してプログラマー自身が実装するのが一般的でしたが、PHP 5.2 からは、元の PCEL のフィルター関数が組み込みライブラリに移動されました。多くの改良が加えられ、より少ない強化で、これらの関数を使用してデータをフィルタリングおよび検証できるようになりました。
データ ソースと検証タイプ
PHP のデータ ソースには 2 つの部分が含まれます。1 つは外部変数 (POST、GET、COOKIE など)、もう 1 つはページ上で内部的に生成されるデータです。 PHP は、これら 2 つのデータ型にそれぞれ ilter_input_** および filter_var_** 一連の関数を定義します。さまざまな検証方法に応じて、検証とサニタイズという 2 つのタイプに分けることができます。 Validating はデータを検証するために使用され、ブール値を返します。サニタイズは、ルールに従って一部の特定の文字をフィルターし、処理された文字列を返します。
簡単な使用法
たとえば、文字列が整数であるかどうかを確認するには、以前は正規表現または is_numeric 関数を使用してこれを実現できました:
コードをコピーします コードは次のとおりです:
$str = '51ab'
preg_match('/^[0-9]*$ /', $str);
is_numeric($str);
$options = array( 'options'=>array('max_range'=>50), 'flags'=>FILTER_FLAG_ALLOW_OCTAL, $str = '51); '; echo filter_var($str, FILTER_VALIDATE_INT, $options) ? '有効です' : '無効です';
上記は無効です。 max_range では、最大値が 50 のみであると規定されているためです。 FILTER_FLAG_ALLOW_OCTAL を使用すると、検証されたデータを 8 進数、つまり 0 から始まる数値にすることができます。
$options パラメーターは、オプションとフラグの 2 つの要素を含む配列です。 flags要素のみであれば配列を使わずに直接渡すことも可能です。
外部データの検証
PHP スクリプト自体によって生成されたデータに加えて、ユーザーによって送信されたデータが大部分を占めます。もちろん、filter_var を直接使用してフィルタリングすることもできます。
{ echo filter_var($_GET['age'], FILTER_VALIDATE_INT) ? '有効です' : '無効です'; 🎜> ただし、PHP には、外部ソースからのデータを検証するための関数もいくつか用意されています。
コードをコピー
コードは次のとおりです:
if(filter_has_var(INPUT_GET, 'age'))
filter_var と比較して、filter_input にはデータのソースを指定するために使用されるパラメーター (最初のパラメーター) が 1 つ増えています。 Filter_has_var() は、指定されたデータが存在するかどうかを判断するために使用されます。
一度に複数のデータをフィルタリングする
PHP には、複数のデータを一度に検証するための filter_var_array 関数と filter_input_array 関数も用意されています。
これは、filter_var_array() の使用方法を示す php.net の例です。
コードをコピー コードは次のとおりです:
$data = array(
'product_id' => ' libgd