magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“ ”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误
magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误
在magic_quotes_gpc=On的情况下,如果输入的数据有
单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
正是因为这个选项必须为On,但是又让用户进行配置的矛盾,在PHP6中删除了这个选项,一切的编程都需要在magic_quotes_gpc=Off下进行了。在这样的环境下如果不对用户的数据进行转义,后果不仅仅是程序错误而已了。同样的会引起数据库被注入攻击的危险。所以从现在开始大家都不要再依赖这个设置为On了,以免有一天你的服务器需要更新到PHP6而导致你的程序不能正常工作。
代码如下 | 复制代码 |
当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1 当magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0 |
因此可以看出这个get_magic_quotes_gpc()函数的作用就是得到环境变量magic_quotes_gpc的值。既然在PHP6中删除了magic_quotes_gpc这个选项,那么在PHP6中这个函数我想也已经不复存在了。
php 判断是否开启get_magic_quotes_gpc功能了,以方便我们是否决定使用addslashes这个函数了。
代码如下 | 复制代码 |
function SQLString($c, $t){ |
预防数据库攻击的正确做法
- 防止sql注入的函数,过滤掉那些非法的字符,提高sql安全性,同时也可以过滤XSS的攻击。
- function filter($str)
- {
- if (empty($str)) return false;
- $str = htmlspecialchars($str);
- $str = str_replace( '/', "", $str);
- $str = str_replace( '"', "", $str);
- $str = str_replace( '(', "", $str);
- $str = str_replace( ')', "", $str);
- $str = str_replace( 'CR', "", $str);
- $str = str_replace( 'ASCII', "", $str);
- $str = str_replace( 'ASCII 0x0d', "", $str);
- $str = str_replace( 'LF', "", $str);
- $str = str_replace( 'ASCII 0x0a', "", $str);
- $str = str_replace( ',', "", $str);
- $str = str_replace( '%', "", $str);
- $str = str_replace( ';', "", $str);
- $str = str_replace( 'eval', "", $str);
- $str = str_replace( 'open', "", $str);
- $str = str_replace( 'sysopen', "", $str);
- $str = str_replace( 'system', "", $str);
- $str = str_replace( '$', "", $str);
- $str = str_replace( "'", "", $str);
- $str = str_replace( "'", "", $str);
- $str = str_replace( 'ASCII 0x08', "", $str);
- $str = str_replace( '"', "", $str);
- $str = str_replace( '"', "", $str);
- $str = str_replace("", "", $str);
- $str = str_replace(">", "", $str);
- $str = str_replace("<", "", $str);
- $str = str_replace("<SCRIPT>", "", $str);
- $str = str_replace("</SCRIPT>", "", $str);
- $str = str_replace("<script>", "", $str);
- $str = str_replace("</script>", "", $str);
- $str = str_replace("select","",$str);
- $str = str_replace("join","",$str);
- $str = str_replace("union","",$str);
- $str = str_replace("where","",$str);
- $str = str_replace("insert","",$str);
- $str = str_replace("delete","",$str);
- $str = str_replace("update","",$str);
- $str = str_replace("like","",$str);
- $str = str_replace("drop","",$str);
- $str = str_replace("DROP","",$str);
- $str = str_replace("create","",$str);
- $str = str_replace("modify","",$str);
- $str = str_replace("rename","",$str);
- $str = str_replace("alter","",$str);
- $str = str_replace("cas","",$str);
- $str = str_replace("&","",$str);
- $str = str_replace(">","",$str);
- $str = str_replace("<","",$str);
- $str = str_replace(" ",chr(32),$str);
- $str = str_replace(" ",chr(9),$str);
- $str = str_replace(" ",chr(9),$str);
- $str = str_replace("&",chr(34),$str);
- $str = str_replace("'",chr(39),$str);
- $str = str_replace("<br />",chr(13),$str);
- $str = str_replace("''","'",$str);
- $str = str_replace("css","'",$str);
- $str = str_replace("CSS","'",$str);
- $str = str_replace("<!--","",$str);
- $str = str_replace("convert","",$str);
- $str = str_replace("md5","",$str);
- $str = str_replace("passwd","",$str);
- $str = str_replace("password","",$str);
- $str = str_replace("../","",$str);
- $str = str_replace("./","",$str);
- $str = str_replace("Array","",$str);
- $str = str_replace("or 1='1'","",$str);
- $str = str_replace(";set|set&set;","",$str);
- $str = str_replace("`set|set&set`","",$str);
- $str = str_replace("--","",$str);
- $str = str_replace("OR","",$str);
- $str = str_replace('"',"",$str);
- $str = str_replace("*","",$str);
- $str = str_replace("-","",$str);
- $str = str_replace("+","",$str);
- $str = str_replace("/","",$str);
- $str = str_replace("=","",$str);
- $str = str_replace("'/","",$str);
- $str = str_replace("-- ","",$str);
- $str = str_replace(" -- ","",$str);
- $str = str_replace(" --","",$str);
- $str = str_replace("(","",$str);
- $str = str_replace(")","",$str);
- $str = str_replace("{","",$str);
- $str = str_replace("}","",$str);
- $str = str_replace("-1","",$str);
- $str = str_replace("1","",$str);
- $str = str_replace(".","",$str);
- $str = str_replace("response","",$str);
- $str = str_replace("write","",$str);
- $str = str_replace("|","",$str);
- $str = str_replace("`","",$str);
- $str = str_replace(";","",$str);
- $str = str_replace("etc","",$str);
- $str = str_replace("root","",$str);
- $str = str_replace("//","",$str);
- $str = str_replace("!=","",$str);
- $str = str_replace("$","",$str);
- $str = str_replace("&","",$str);
- $str = str_replace("&&","",$str);
- $str = str_replace("==","",$str);
- $str = str_replace("#","",$str);
- $str = str_replace("@","",$str);
- $str = str_replace("mailto:","",$str);
- $str = str_replace("CHAR","",$str);
- $str = str_replace("char","",$str);
- return $str;
- }
- 更加简便的防止sql注入的方法(推荐使用这个):
- if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开
- {
- $post = addslashes($name); // magic_quotes_gpc没有打开的时候把数据过滤
- }
- $name = str_replace("_", "\_", $name); // 把 '_'过滤掉
- $name = str_replace("%", "\%", $name); // 把' % '过滤掉
- $name = nl2br($name); // 回车转换
- $name= htmlspecialchars($name); // html标记转换
- return $name;
代码如下 | 复制代码 |
function check_input($value) { // 去除斜杠 if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // 如果不是数字则加引号 if (!is_numeric($value)) { $value = “‘” . mysql_real_escape_string($value) . “‘”; } return $value; } $con = mysql_connect(“localhost”, “hello”, “321″); if (!$con) { die(‘Could not connect: ‘ . mysql_error()); } // 进行安全的 SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = “SELECT * FROM users WHERE user=$user AND password=$pwd”; mysql_query($sql); mysql_close($con); ?> |