加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php安全之防注入详细详解

发布时间:2022-07-05 16:47:20 所属栏目:PHP教程 来源:互联网
导读:我们知道Web上提交数据有两种方式,一种是get、一种是post,那么很多常见的sql注射就是从get方式入手的,而且注射的语句里面一定是包含一些sql语句的,因为没有sql语句,那么如何进行,sql语句有四大句:select、update、delete、insert. 那么我们如果在我们提交的
  我们知道Web上提交数据有两种方式,一种是get、一种是post,那么很多常见的sql注射就是从get方式入手的,而且注射的语句里面一定是包含一些sql语句的,因为没有sql语句,那么如何进行,sql语句有四大句:select、update、delete、insert.
 
  那么我们如果在我们提交的数据中进行过滤是不是能够避免这些问题呢?于是我们使用正则就构建如下函数,代码如下:
 
  /*
  函数名称:inject_check()
  函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全
  参 数:$sql_str: 提交的变量
  返 回 值:返回检测结果,ture or false
  函数作者:heiyeluren
  */
  //开源代码phpfensi.com
  function inject_check($sql_str)  
  {  
   }
  ?>
  假设我们提交URL为:a.php?id=1,那么就会提示:
 
  "提交的数据合法,请继续!",如果我们提交 a.php?id=1%27 select * from tb_name,就会出现提示:"你提交的数据非法,请检查后重新提交!",那么就达到了我们的要求.
 
  但是,问题还没有解决,假如我们提交的是 a.php?id=1asdfasdfasdf 呢,我们这个是符合上面的规则的,但是呢,它是不符合要求的,于是我们为了可能其他的情况,我们再构建一个函数来进行检查,代码如下:
 
  /*
  函数名称:verify_id()
  函数作用:校验提交的ID类值是否合法
  参 数:$id: 提交的ID值
  返 回 值:返回处理后的ID
  函数作者:heiyeluren
  */
  function verify_id($id=null)  
  {  
   
     if (!$id) { exit('没有提交参数!'); }    // 是否为空判断  
   
     elseif (inject_check($id)) { exit('提交的参数非法!'); }    // 注射判断  
   
     elseif (!is_numeric($id)) { exit('提交的参数非法!'); }    // 数字判断  
   
     $id = intval($id);    // 整型化  
   
     return  $id;  
   
  }
  呵呵,那么我们就能够进行校验了,于是我们上面的程序代码就变成了下面的:
 
  <?php
  if (inject_check($_GET['id']))
  {
     exit('你提交的数据非法,请检查后重新提交!');
  }
  else
  {
    $id = verify_id($_GET['id']);    // 这里引用了我们的过滤函数,对$id进行过滤  
   echo '提交的数据合法,请继续!';
  }
  ?>
   函数名称:str_check()
  函数作用:对提交的字符串进行过滤
   */
   
  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;   
   
  }  
  OK,我们又一次的避免了服务器被沦陷的危险.
 
  最后,再考虑提交一些大批量数据的情况,比如发贴,或者写文章、新闻,我们需要一些函数来帮我们过滤和进行转换,再上面函数的基础上,我们构建如下函数,代码如下:
 
  /*
    
     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;  
   
  }  

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读