PHP でフィルターを使用してデータ セキュリティ フィルタリングを行う
セキュリティは永遠のテーマであり、PHPer は必然的にデータの検証とフィルタリングに合格する必要があります。多少の経験がある PHPer であれば、セキュリティの問題だけで、通常の検証メソッドを正確に作成できると思います。ここではPHPのFilterを使った簡単かつ効率的な検証方法を紹介します。
フィルター
PHP 拡張機能 (PECL) の一部として使用すると、使用時に外部ライブラリ ファイルをロードする必要がありますが、PHP では
5.2 以降のバージョンは PHP にコンパイルされているため、使用時にロードする必要はありません。現在、フィルターは次の関数を提供します: filter_has_var、filter_id、
filter_input_array、filter_input、filter_var_array、filter_var。紙面の都合上、ここでは2つだけ紹介します。
最も一般的に使用されるのは、filter_var と filter_input です。 filter_var はページの内部変数のコンテンツ フィルタリングに使用され、filter_input は外部変数に使用されます。
(POST、GET、COOKIE など) コンテンツ フィルタリング。
?
まず、filter_var 関数を紹介します。関数のプロトタイプを見てみましょう:
mixed filter_var (mixed $variable [, int $filter [,mixed $options ]] )
$variable - フィルターされる変数
$filter - フィルターされる型 ID 定数
$options—フィルター タイプ パラメーター
それ
習得する必要があるのは、$filter パラメーターです。これは、次のような特別な意味を持つ事前定義された定数です。 FILTER_VALIDATE_INT は、整数変数の検証を表します。
金額、FILTER_VALIDATE_EMAIL はメール形式の検証などを表します。 (その他の定数については、このパラメーターの詳細が記載されている Filter に関する PHP マニュアルを確認してください。
詳細リスト)
戻り値は、マッチングの場合、一致が正しければ元のコンテンツが返され、フィルタリングの場合、一致が正しくない場合は false が返され、フィルタリングされたコンテンツが返されます。
使用例をいくつか示します:
<? //整型格式测试 $var = '12345'; var_dump(filter_var($var, FILTER_VALIDATE_INT)); $var = '12B45'; var_dump(filter_var($var, FILTER_VALIDATE_INT)); $var=300; $int_options = array("options"=>array("min_range"=>0, "max_range"=>256)); var_dump(filter_var($var, <code>FILTER_VALIDATE_INT</code> , $int_options)) //Email格式测试 $var = 'linvo@126.com'; var_dump(filter_var($var, FILTER_VALIDATE_EMAIL)); $var = 'linvo@126com'; var_dump(filter_var($var, FILTER_VALIDATE_EMAIL)); //IP格式测试 $var = '11.22.33.44'; var_dump(filter_var($var, FILTER_VALIDATE_IP)); $var = '111.222.333.444'; var_dump(filter_var($var, FILTER_VALIDATE_IP)); //URL格式测试 $var = 'http://www.linvo2008.cn/blog'; var_dump(filter_var($var, FILTER_VALIDATE_URL)); $var = 'www.linvo2008.cn/blog'; var_dump(filter_var($var, FILTER_VALIDATE_URL)); //去除超文本标签测试 $var = 'This is a <a href="#" mce_href="#">link</a> test!'; var_dump(filter_var($var, FILTER_SANITIZE_STRING));
自分で実行して結果を確認できます。また、3番目の$optionsパラメータでは検証タイプを詳細に設定できます。たとえば、IP を検証する場合、このパラメータを使用してフィルタリング ルールを IPv4 または IPv6 に設定できます:
?
<? //IPv6格式测试(支持缩写形式) $var = '2001:0db8:85a3::1319:8a2e:0370:7344'; var_dump(filter_var($var, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
その他の詳細なパラメータについては、PHP マニュアルを参照してください。
?
上記はページ上の内部変数のフィルタリングですが、ユーザーが入力したデータは外部変数からのものであるため、filter_input 関数が使用されます。
mixed filter_input ( int $type , string $variable_name [, int $filter [,mixed $options ]] )
から
関数プロトタイプから、元の 3 つのパラメーターに加えて、追加の $type パラメーターがあることがわかります。このパラメータは、フィルタリングされる変数が配置される配列を設定するために使用されます。これは、ポスト モードで保存することと同等です。
$_POST 配列では、get メソッドが $_GET 配列に保存されます。また、post は INPUT_POST に対応し、get は に対応するなど、事前定義された定数によっても設定されます。
INPUT_GET などを行う必要があります。 (その他の定数については、PHP マニュアルを参照してください)
以下に例を示します。この例は、index.html フロントエンド フォーム ページと do.php バックエンド処理ページの 2 つのページで構成されています。
ファイル:index.html
?
<form action="do.php" method="post"> <label>Name:</label> <input name="name" type="text" /> <label>QQ:</label> <input name="qq" type="text" /> <label>Email:</label> <input name="email" type="text" /> <label>Blog:</label> <input name="blog" type="text" /> <input type="submit" /> </form>
ファイル:do.php
?
<? $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING); $qq = filter_input(INPUT_POST, 'qq', FILTER_VALIDATE_INT); $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); $blog = filter_input(INPUT_POST, 'blog', FILTER_VALIDATE_URL); $error = '<em>Error</em>'; echo 'Name:',$name; $msg = $qq === false ? $error : $qq; echo 'QQ:',$msg; $msg = $email === false ? $error : $email; echo 'Email:',$msg; $msg = $blog === false ? $error : $blog; echo 'Blog:',$msg;
index.html ページのデモ効果 (送信前):
do.php ページのデモンストレーション効果 (送信後):
この時点で、誰もがフィルターの使い方を基本的にマスターしているはずです。さらに多くの使い方があなた自身で発見されるのを待っています:)
?
参考: http://www.w3school.com.cn/php/php_ref_filter.asp
?
?
?
?
?
?
?