大连蓝普科技有限公司提供的网站制作、网站建设、虚拟空间、域名注册、网站外包、网站托管、企业邮箱服务值得信赖!
服务热线:0411-39750801
蓝普首页 网站建设 网站案例 域名注册 虚拟空间 网站优化 我色我摄 腾讯企业邮 淘宝摄影 微信营销 多媒体 关于我们
当前位置:首页 >> 公司资讯
网站建设-蓝普资讯
php+mysql注入防范

防范可以从两个方面着手,一个就是服务器,二个就是代码本身,介绍服务器配置的文章很多了,无非就是把magic_quotes_gpc设置为 On,display_errors设置为Off,这里也就不在多说,既然本文接触都是程序的问题,我们还是从程序本身寻找原因。
  如果说php比asp易用,安全,从内置的函数就可以体现出来。如果是整形的变量,只需使用一个intval()函数即可解决问题,在执行查询之前,我们先处理一下变量,如下面的例子就是很安全的了:

$id = intval($id);
mysql_query("SELECT * FROM article WHERE articleid='$id'");

  或者这样写:

mysql_query("SELECT * FROM article WHERE articleid=".intval($id)."")

  不管如何构造,最终还是会先转换为整形猜放入数据库的。很多大型程序都是这样写,非常简洁。
  字符串形的变量也可以用addslashes()整个内置函数了,这个函数的作用和magic_quotes_gpc一样,使用后,所有的 ' (单引号), " (双引号), / (反斜线) and 空字符会自动转为含有反斜线的溢出字符。而且新版本的php,就算magic_quotes_gpc打开了,再使用addslashes()函数,也不会有冲突,可以放心使用。例子如下:

$username = addslashes($username);
mysql_query("SELECT * FROM members WHERE userid='$username'");

  或者这样写:

mysql_query("SELECT * FROM members WHERE userid=".addslashes($username)."")

  使用addslashes()函数还可以避免引号配对错误的情况出现。而模糊搜索方面,就直接把“_”、“%”转换为“/_”“/%”就可以了,当然也不要忘记使用addslashes()函数。具体代码如下:

$keywords = addslashes($keywords);
$keywords = str_replace("_","/_",$keywords);
$keywords = str_replace("%","/%",$keywords);

  不用像ASP那样,过滤一点变量,就要写一大堆的代码,就是上面的一点点代码,我们就可以把本文所有的问题解决了,是不是很简便?

 

再COPY过来几个函数,用得到的时候再改改:

/*   
函数名称:inject_check()   
函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全   
参  数:$sql_str: 提交的变量   
返 回 值:返回检测结果,ture or false   
*/    
function inject_check($sql_str) {     
   return eregi('select|insert|update|delete|/'|///*|/*|/././/|/.//|union|into|load_file|outfile', $sql_str);     // 进行过滤     
}     
    
/*   
函数名称:verify_id()   
函数作用:校验提交的ID类值是否合法   
参  数:$id: 提交的ID值   
返 回 值:返回处理后的ID   
*/    
function verify_id($id=null) {     
   if (!$id) { exit('没有提交参数!'); }     // 是否为空判断     
   elseif (inject_check($id)) { exit('提交的参数非法!'); }     // 注射判断     
   elseif (!is_numeric($id)) { exit('提交的参数非法!'); }     // 数字判断     
   $id = intval($id);     // 整型化     
    
   return   $id;     
}     
    
/*   
函数名称:str_check()   
函数作用:对提交的字符串进行过滤   
参  数:$var: 要处理的字符串   
返 回 值:返回过滤后的字符串   
*/    
function str_check( $str ) {     
   if (!get_magic_quotes_gpc()) {     // 判断magic_quotes_gpc是否打开     
     $str = addslashes($str);     // 进行过滤     
   }     
   $str = str_replace("_", "/_", $str);     // 把 '_'过滤掉     
   $str = str_replace("%", "/%", $str);     // 把 '%'过滤掉     
    
   return $str;      
}     
    
/*   
函数名称:post_check()   
函数作用:对提交的编辑内容进行处理   
参  数:$post: 要提交的内容   
返 回 值:$post: 返回过滤后的内容   
*/    
function post_check($post) {     
   if (!get_magic_quotes_gpc()) {     // 判断magic_quotes_gpc是否为打开     
     $post = addslashes($post);     // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤     
   }     
   $post = str_replace("_", "/_", $post);     // 把 '_'过滤掉     
   $post = str_replace("%", "/%", $post);     // 把 '%'过滤掉     
   $post = nl2br($post);     // 回车转换     
   $post = htmlspecialchars($post);     // html标记转换     
    
   return $post;     
}