mysql 注入安全一

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){
 $c=(!get_magic_quotes_gpc())?addslashes($c):$c;
 switch($t){
  case 'text':
   $c=($c!='')?"'".$c."'":'NULL';
   break;
  case 'search':
   $c="'%%".$c."%%'";
   break;
  case 'int':
   $c=($c!='')?intval($c):'0';
   break;
 }
 return $c;
}

预防数据库攻击的正确做法

  1. 防止sql注入的函数,过滤掉那些非法的字符,提高sql安全性,同时也可以过滤XSS的攻击。
  2. function filter($str)
  3. {
  4.     if (empty($str)) return false;
  5.     $str = htmlspecialchars($str);
  6.     $str = str_replace( '/', "", $str);
  7.     $str = str_replace( '"', "", $str);
  8.     $str = str_replace( '(', "", $str);
  9.     $str = str_replace( ')', "", $str);
  10.     $str = str_replace( 'CR', "", $str);
  11.     $str = str_replace( 'ASCII', "", $str);
  12.     $str = str_replace( 'ASCII 0x0d', "", $str);
  13.     $str = str_replace( 'LF', "", $str);
  14.     $str = str_replace( 'ASCII 0x0a', "", $str);
  15.     $str = str_replace( ',', "", $str);
  16.     $str = str_replace( '%', "", $str);
  17.     $str = str_replace( ';', "", $str);
  18.     $str = str_replace( 'eval', "", $str);
  19.     $str = str_replace( 'open', "", $str);
  20.     $str = str_replace( 'sysopen', "", $str);
  21.     $str = str_replace( 'system', "", $str);
  22.     $str = str_replace( '$', "", $str);
  23.     $str = str_replace( "'", "", $str);
  24.     $str = str_replace( "'", "", $str);
  25.     $str = str_replace( 'ASCII 0x08', "", $str);
  26.     $str = str_replace( '"', "", $str);
  27.     $str = str_replace( '"', "", $str);
  28.     $str = str_replace("", "", $str);
  29.     $str = str_replace("&gt", "", $str);
  30.     $str = str_replace("&lt", "", $str);
  31.     $str = str_replace("<SCRIPT>", "", $str);
  32.     $str = str_replace("</SCRIPT>", "", $str);
  33.     $str = str_replace("<script>", "", $str);
  34.     $str = str_replace("</script>", "", $str);
  35.     $str = str_replace("select","",$str);
  36.     $str = str_replace("join","",$str);
  37.     $str = str_replace("union","",$str);
  38.     $str = str_replace("where","",$str);
  39.     $str = str_replace("insert","",$str);
  40.     $str = str_replace("delete","",$str);
  41.     $str = str_replace("update","",$str);
  42.     $str = str_replace("like","",$str);
  43.     $str = str_replace("drop","",$str);
  44.     $str = str_replace("DROP","",$str);
  45.     $str = str_replace("create","",$str);
  46.     $str = str_replace("modify","",$str);
  47.     $str = str_replace("rename","",$str);
  48.     $str = str_replace("alter","",$str);
  49.     $str = str_replace("cas","",$str);
  50.     $str = str_replace("&","",$str);
  51.     $str = str_replace(">","",$str);
  52.     $str = str_replace("<","",$str);
  53.     $str = str_replace(" ",chr(32),$str);
  54.     $str = str_replace(" ",chr(9),$str);
  55.     $str = str_replace("    ",chr(9),$str);
  56.     $str = str_replace("&",chr(34),$str);
  57.     $str = str_replace("'",chr(39),$str);
  58.     $str = str_replace("<br />",chr(13),$str);
  59.     $str = str_replace("''","'",$str);
  60.     $str = str_replace("css","'",$str);
  61.     $str = str_replace("CSS","'",$str);
  62.     $str = str_replace("<!--","",$str);
  63.     $str = str_replace("convert","",$str);
  64.     $str = str_replace("md5","",$str);
  65.     $str = str_replace("passwd","",$str);
  66.     $str = str_replace("password","",$str);
  67.     $str = str_replace("../","",$str);
  68.     $str = str_replace("./","",$str);
  69.     $str = str_replace("Array","",$str);
  70.     $str = str_replace("or 1='1'","",$str);
  71.     $str = str_replace(";set|set&set;","",$str);
  72.     $str = str_replace("`set|set&set`","",$str);
  73.     $str = str_replace("--","",$str);
  74.     $str = str_replace("OR","",$str);
  75.     $str = str_replace('"',"",$str);
  76.     $str = str_replace("*","",$str);
  77.     $str = str_replace("-","",$str);
  78.     $str = str_replace("+","",$str);
  79.     $str = str_replace("/","",$str);
  80.     $str = str_replace("=","",$str);
  81.     $str = str_replace("'/","",$str);
  82.     $str = str_replace("-- ","",$str);
  83.     $str = str_replace(" -- ","",$str);
  84.     $str = str_replace(" --","",$str);
  85.     $str = str_replace("(","",$str);
  86.     $str = str_replace(")","",$str);
  87.     $str = str_replace("{","",$str);
  88.     $str = str_replace("}","",$str);
  89.     $str = str_replace("-1","",$str);
  90.     $str = str_replace("1","",$str);
  91.     $str = str_replace(".","",$str);
  92.     $str = str_replace("response","",$str);
  93.     $str = str_replace("write","",$str);
  94.     $str = str_replace("|","",$str);
  95.     $str = str_replace("`","",$str);
  96.     $str = str_replace(";","",$str);
  97.     $str = str_replace("etc","",$str);
  98.     $str = str_replace("root","",$str);
  99.     $str = str_replace("//","",$str);
  100.     $str = str_replace("!=","",$str);
  101.     $str = str_replace("$","",$str);
  102.     $str = str_replace("&","",$str);
  103.     $str = str_replace("&&","",$str);
  104.     $str = str_replace("==","",$str);
  105.     $str = str_replace("#","",$str);
  106.     $str = str_replace("@","",$str);
  107.     $str = str_replace("mailto:","",$str);
  108.     $str = str_replace("CHAR","",$str);
  109.     $str = str_replace("char","",$str);
  110.     return $str;
  111. }
  112.  
  113.  
  114. 更加简便的防止sql注入的方法(推荐使用这个):
  115.  
  116.  if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开     
  117.  {     
  118.     $post = addslashes($name); // magic_quotes_gpc没有打开的时候把数据过滤     
  119.  }     
  120.  
  121.  $name = str_replace("_", "\_", $name); // 把 '_'过滤掉   
  122.    
  123.  $name = str_replace("%", "\%", $name); // 把' % '过滤掉     
  124.  
  125.  $name = nl2br($name); // 回车转换     
  126.  
  127.  $name= htmlspecialchars($name); // html标记转换    
  128.      
  129.  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);

?>

猜你喜欢

转载自blog.csdn.net/zhangdaohong/article/details/82777280