今天寫代碼的時候猛然想到是不能能夠通過一個文件來處理整個網(wǎng)站中所有可能出現(xiàn)注入的地方進行防范呢?這樣就能夠不用在每個程序里對每個變量進行過濾,節(jié)省了時間和代碼。
我們主要是從兩點出發(fā),因為我們的獲取的變量一般都是通過get或者post方式提交過來的,那么我們只要對get和post過來的變量進行過濾,那么就能夠達到防止注入的效果。而且我們的php真是非常好,已經(jīng)內(nèi)置了$_get和$_post兩個數(shù)組來存儲所有變量,我們要做的工作就是過濾每個變量就可以了。
下面看具體的代碼:
/* author: heiyeluren */
/* 過濾所有g(shù)et過來變量 */
foreach ($_get as $get_key=>$get_var)
{
if (is_numeric($get_var))
if (is_numeric($get_var)) {
$get[strtolower($get_key)] = get_int($get_var);
} else {
$get[strtolower($get_key)] = get_str($get_var);
}
}
/* 過濾所有post過來的變量 */
foreach ($_post as $post_key=>$post_var)
{
if (is_numeric($post_var)) {
$post[strtolower($post_key)] = get_int($post_var);
} else {
$post[strtolower($post_key)] = get_str($post_var);
}
}
/* 過濾函數(shù) */
//整型過濾函數(shù)
function get_int($number)
{
return intval($number);
}
//字符串型過濾函數(shù)
function get_str($string)
{
if (!get_magic_quotes_gpc()) {
return addslashes($string);
}
return $string;
}
那么我們把以上代碼放到一個公共的文件里,比如security.inc.php里面,每個文件里都include一下這個文件,那么就能夠給任何一個程序進行提交的所有變量進行過濾了,就達到了我們一勞永逸的效果。
另外,還有一些其他的過濾方法,比如采用我以前使用的關(guān)鍵字過濾的方法:http://dev.csdn.net/article/71/71475.shtm
還可以參考三尺寒冰寫的方法:http://www.fanghei.com/html/2005-06/20050607114008.htm
方法是不同的,但是核心就是為了我們的代碼更加安全。
author: heiyeluren
date: 2005-7-20
新聞熱點
疑難解答