zoukankan      html  css  js  c++  java
  • PHP SQL注入的防范

    说到网站安全就不得不提到SQL注入(SQL Injection),如果你用过ASP,对SQL注入一定有比较深的理解,PHP的安全性相对较高,这是因为MYSQL4以下的版本不支持子语句,而且当php.ini里的 magic_quotes_gpc 为On 时。

    提交的变量中所有的 ' (单引号), " (双引号), (反斜线) and 空字符会自动转为含有反斜线的转义字符,给SQL注入带来不少的麻烦。

    请看清楚:“麻烦”而已~这并不意味着PHP防范SQL注入,书中就讲到了利用改变注入语句的编码来绕过转义的方法,比如将SQL语句转成 ASCII编码(类似:char(100,58,92,108,111,99,97,108,104,111,115,116…)这样的格式),或者转成 16进制编码,甚至还有其他形式的编码,这样以来,转义过滤便被绕过去了,那么怎样防范呢:

    a. 打开magic_quotes_gpc或使用addslashes()函数

    在新版本的PHP中,就算magic_quotes_gpc打开了,再使用addslashes()函数,也不会有冲突,但是为了更好的实现版本兼容,建议在使用转移函数前先检测magic_quotes_gpc状态,或者直接关掉,代码如下:

    PHP防范SQL注入的代码

    //去除转义字符
    function stripslashes_array($array){
      if (is_array($array)) {   
        foreach ($array as $k => $v) {   
          $array[$k] = stripslashes_array($v);   
        }   
      } else if (is_string($array)) {   
        $array = stripslashes($array);   
      }
       return $array;  }
    $_POST = array_map('stripslashes_deep', $_POST);
    
    
     

    去除magic_quotes_gpc的转义之后再使用addslashes函数,代码如下:

    PHP防范SQL注入的代码

    $keywords = addslashes($keywords);
    $keywords = str_replace("_","\_",$keywords);//转义掉”_”
    $keywords = str_replace("%","\%",$keywords);//转义掉”%”

    后两个str_replace替换转义目的是防止黑客转换SQL编码进行攻击。

    b. 强制字符格式(类型)

    在很多时候我们要用到类似xxx.php?id=xxx这样的URL,一般来说$id都是整型变量,为了防范攻击者把$id篡改成攻击语句,我们要尽量强制变量,代码如下:

    PHP防范SQL注入的代码

    $id=intval($_GET[‘id’]);

    当然,还有其他的变量类型,如果有必要的话尽量强制一下格式。

    c. SQL语句中包含变量加引号

    这一点儿很简单,但也容易养成习惯,先来看看这两条SQL语句:

    SQL代码

    SELECT * FROM article WHERE articleid='$id'
    SELECT * FROM article WHERE articleid=$id

    两种写法在各种程序中都很普遍,但安全性是不同的,第一句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了 正确的SQL语句,也不会正常执行,而第二句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为SQL语句执 行,因此,我们要养成给SQL语句中变量加引号的习惯。

    d.URL伪静态化

    URL伪静态化也就是URL重写技术,像Discuz!一样,将所有的URL都rewrite成类似xxx-xxx-x.html格式,既有利于SEO,又达到了一定的安全性,也不失为一个好办法。但要想实现PHP防范SQL注入,前提是你得有一定的“正则”基础。

  • 相关阅读:
    普通PC硬盘与DVR专用硬盘主要差别
    远程监控,需要安装控件,安装前对浏览器设置如下。硬盘录像机,采集卡通用...
    SQL Server不允许进行远程连接
    远程备份(还原)SQL2000数据库
    安装MSDE时提示 实例名无效
    冰雹,刨冰,危险人物
    北京首现最严重的0day攻击方式
    孤独,寂寞,无聊
    大家平时都在做什么
    华山之旅
  • 原文地址:https://www.cnblogs.com/tjws/p/3580024.html
Copyright © 2011-2022 走看看