注意php各版本之間的區別 好比:php5.4 php5.5中 $_REQUEST 默認只包含 $_GET $_POST 不包含$_COOKIESphp
public function dispose_request() { $_POST = daddslashes($_POST); $_GET = daddslashes($_GET); $_REQUEST = daddslashes($_REQUEST); } 上面的代碼若是是在PHP5。3以上的環境中運行 $_COOKIES變量是沒有通過轉義的。
通用過濾轉義函數在過濾數組時,別忘記對$key過濾html
function daddslashes($string, $force = 0) { if (!get_magic_quotes_gpc() || $force) { if (is_array($string)) { foreach ($string as $key => $val) { $string[$key] = daddslashes($val, $force); } } else { $string = addslashes($string); } } return $string; } $test[「username’a」]=」admin’a」 //只轉義了數組對應的value key沒有轉義 $test=daddslashes($test);
在用preg_replace 中,慎用e 參數mysql
function dunserialize($string) { return unserialize(preg_replace('!s:(\d+):"(.*?)";!se', '"s:".strlen("$2").":\"$2\";"', $string)); } $str='s:123:"${phpinfo()}";'; dunserialize($str); //程序最終會執行php代碼,產生代碼執行漏洞 其它會產生相似代碼執行漏洞的函數還有: eval create_function call_user_func call_user_func_array assert 等 在使用這些函數時務必注意參數的合法性。
parse_str使用過程當中注意變量覆蓋和注入漏洞sql
parse_str('a=%27'); php<=5.3 $a=\’ Php>5.3 $a=’
在要對瀏覽器標識入庫時,必須作轉義處理。shell
$agent = addslashes($_SERVER['HTTP_USER_AGENT']);