注意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']);