抗注射
今日コードを書いていたときに、Web サイト全体で考えられるすべてのインジェクション場所を 1 つのファイルで処理して防ぐことはできないのではないかと突然思いました。これにより、各プログラムで各変数をフィルタリングする必要がなくなり、時間とコードが節約されます。
主に 2 つのポイントから開始します。取得する変数は通常 GET または POST を通じて送信されるため、インジェクションを防ぐには GET と POST からの変数をフィルターするだけで済みます。そして、私たちの PHP は非常に優れており、$_GET と $_POST という 2 つの組み込み配列があり、各変数をフィルターするだけで済みます。
以下の具体的なコードを見てください:
/* 著者: heiyeluren */
/* すべての GET 変数をフィルタリング*/
foreach ($_GET as $get_key=>$get_var)
{
if ( is_numeric($get_var))
if (is_numeric($get_var)) {
$get[strto lower($get_key)] = get_int($get_var);
} else {
$get[strto lower($get_key)] = get_str( $get_var);
}
}
/* すべての POST 変数をフィルタリング*/
foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var)) {
$ post[ strto lower($post_key)] = get_int($post_var);
} else {
$post[strto lower($post_key)] = get_str($post_var);
}
}
/* フィルター関数*/
/ /整数フィルター関数
function get_int($number)
{
Return intval($number);
}
//文字列フィルター関数
function get_str($string)
{
if (!get_magic_quotes_gpc() ) {
return addlashes ($string);
}
return $string;
}
次に、上記のコードを security.inc.php などの公開ファイルに配置し、各ファイルにインクルードします。このファイルをクリックすると、任意のプログラムによって送信されたすべての変数をフィルタリングできるため、これまでと同様の効果が得られます。
さらに、私が以前使用したキーワードフィルタリング方法など、他のフィルタリング方法もあります: http://dev.csdn.net/article/71/71475.shtm
Sanchihan Bing の方法も参照できます。 : http://www.fanghei.com/html/2005-06/20050607114008.htm
方法は異なりますが、中心となるのはコードをより安全にすることです。
作成者: heiyeluren
日付: 2005-7-20