当前位置:首页 > PHP教程 > php应用 > 列表

php安全,防止sql注入攻击简单方法

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-23 13:58:14 浏览: 评论:0 

方法一:密码比对

思路:首先通过用户输入的用户名去查询数据库,得到该用户名在数据库中对应的密码,再将从数据库中查询到的密码和用户提交过来的密码进行比对.

php实例代码如下:

  1. $sql="select password from users where username='$name'"
  2.  
  3.      $res=mysql_query($sql,$conn); 
  4.  
  5.      if ($arr=mysql_fetch_assoc($res)){//如果用户名存在 
  6.  
  7.             if ($arr['password']==$pwd) {//密码比对 
  8.  
  9.                    echo "登录成功"
  10.  
  11.      }else
  12.  
  13.             echo "密码输入有误"
  14.  
  15.      } 
  16.  
  17.      }else { 
  18.  
  19.             echo "该用户名不存在"
  20.  
  21.      } 

分析:该情况下,代码健壮了不少,即使在magic_quote_gpc=Off的情况下,也能防止SQL注入攻击,因为攻击者想成功登录的话,得绕过两道坎,第一是输入的用户名要存在,这一步可以构造一个SQL语句(‘ or 1=1%23)直接绕过,但是这样子无法通过第二道坎,因为需要用户输入一个正确的密码才能通过,显然,这已经拒绝了SQL注入攻击.

方法二:使用PDO的PDO::prepare()预处理操作来防止SQL注入攻击.

思路:创建一个pdo对象,利用pdo的预处理操作可以防止SQL注入攻击.

php实例代码如下:

  1. $name=$_GET['username']; 
  2.  
  3.        $pwd=$_GET['password'];    
  4.  
  5.        $sql="select * from users where username=? and password=?"
  6.  
  7.        //1.创建一个pdo对象 
  8.  
  9.        $pdo=new PDO("mysql:host=localhost;port=3306;dbname=injection","root",""); 
  10.  
  11.        //2.设置编码 
  12.  
  13.        $pdo->exec("set names 'utf8'"); 
  14.  
  15.        //3.预处理$sql语句 
  16.  
  17.        $pdoStatement=$pdo->prepare($sql); 
  18.  
  19.        //4.把接收到的用户名和密码填入 
  20.  
  21.        $pdoStatement->execute(array($name,$pwd)); 
  22.  
  23.        //5.取出结果 
  24.  
  25.        $res=$pdoStatement->fetch(); 
  26.  
  27.        if(emptyempty($res)){ 
  28.        //开源代码phpfensi.com 
  29.               echo "用户名或密码输入有误"
  30.  
  31.        }else
  32.  
  33.               echo "登录成功";         
  34.  
  35.        } 

Tags: php安全 防止sql注入

分享到: