php安全过滤是防止注入的第一道防线,不得大意。提到PHP的安全过滤,不得不提的两个东西是`set_magic_quotes_runtime` 和 `magic_quotes_gpc`。
`set_magic_quotes_runtime()` 可以让程序员在代码中动态开启或关闭 `magic_quotes_runtime`,`set_magic_quotes_runtime(1)` 表示开启,
`set_magic_quotes_runtime(0)` 则表示关闭。当`set_magic_quotes_runtime(1)`时,从数据库或通过`fread`之类的函数读取的文本,将自动对' "和\自动
加上反斜杠\进行转义,防止溢出。这在对数据库的数据进行转移的时候非常有用。但在一般情况下,应当将其关闭,否则从数据库读取出来的数据单引
号、双引号和反斜杠都会被加上\,导致显示不正常。像Discuz,PHPWind都在公共文件的头部加上一句 `set_magic_quotes_runtime(0);` 强制关闭
`magic_quotes_runtime` 。
`magic_quotes_gpc` 和 `magic_quotes_runtime` 的区别在于,`magic_quotes_gpc` 是对通过GET、POST、COOKIE传递的数据进行转义,一般在数据入库前
要先进行转义,`magic_quotes_gpc`不能在代码中动态开启或关 闭,需要到`php.ini`将`magic_quotes_gpc`设置为on或off,代码中可以用`get_magic_quotes_gpc`
获取 `magic_quotes_gpc`的状态。当`magic_quotes_gpc`为off时,需要手工对数据进行addslashes,代码如下:
if (!get_magic_quotes_gpc()) {add_slashes($_GET);add_slashes($_POST);add_slashes($_COOKIE);}function add_slashes($string) {if (is_array($string)) {foreach ($string as $key => $value) {$string[$key] = add_slashes($value);}} else {$string = addslashes($string);}return $string;}
php防注入函数,字符过滤函数
//解码function htmldecode($str){if(empty($str)) return;if($str=="") return $str;$str=str_replace("select","select",$str);$str=str_replace("join","join",$str);$str=str_replace("union","union",$str);$str=str_replace("where","where",$str);$str=str_replace("insert","insert",$str);$str=str_replace("delete","delete",$str);$str=str_replace("update","update",$str);$str=str_replace("like","like",$str);$str=str_replace("drop","drop",$str);$str=str_replace("create","create",$str);$str=str_replace("modify","modify",$str);$str=str_replace("rename","rename",$str);$str=str_replace("alter","alter",$str);$str=str_replace("cas","cast",$str);$str=str_replace("&","&",$str);$str=str_replace(">",">",$str);$str=str_replace("<","",chr(13),$str);$str=str_replace("''","'",$str);return $str;}//编码function htmlencode($str){if(empty($str)) return;if($str=="") return $str;$str=trim($str);$str=str_replace("&","&",$str);$str=str_replace(">",">",$str);$str=str_replace("",$str);$str=str_replace("'","''",$str);$str=str_replace("select","select",$str);$str=str_replace("join","join",$str);$str=str_replace("union","union",$str);$str=str_replace("where","where",$str);$str=str_replace("insert","insert",$str);$str=str_replace("delete","delete",$str);$str=str_replace("update","update",$str);$str=str_replace("like","like",$str);$str=str_replace("drop","drop",$str);$str=str_replace("create","create",$str);$str=str_replace("modify","modify",$str);$str=str_replace("rename","rename",$str);$str=str_replace("alter","alter",$str);$str=str_replace("cast","cas",$str);return $str;}