程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php安全-防止sql注入攻擊簡單方法

php安全-防止sql注入攻擊簡單方法

編輯:關於PHP編程

本文章簡單的利用一個實例來介紹了關於php防止sql注入的簡單辦法,有需要學習的朋友可以參考一下本文章哦。


方法一:密碼比對

思路:首先通過用戶輸入的用戶名去查詢數據庫,得到該用戶名在數據庫中對應的密碼,再將從數據庫中查詢到的密碼和用戶提交過來的密碼進行比對。

代碼: 

 代碼如下 復制代碼

       $sql="select password from users where username='$name'";

       $res=mysql_query($sql,$conn);

       if ($arr=mysql_fetch_assoc($res)){//如果用戶名存在

              if ($arr['password']==$pwd) {//密碼比對

                     echo "登錄成功";

       }else{

              echo "密碼輸入有誤";

       }

       }else {

              echo "該用戶名不存在";

       }

分析:該情況下,代碼健壯了不少,即使在magic_quote_gpc=Off的情況下,也能防止SQL注入攻擊。因為攻擊者想成功登錄的話,得繞過兩道坎,第一是輸入的用戶名要存在,這一步可以構造一個SQL語句(‘ or 1=1%23)直接繞過,但是這樣子無法通過第二道坎。因為需要用戶輸入一個正確的密碼才能通過,顯然,這已經拒絕了SQL注入攻擊。

 


方法二:使用PDO的PDO::prepare()預處理操作來防止SQL注入攻擊

思路:創建一個pdo對象,利用pdo的預處理操作可以防止SQL注入攻擊

代碼:

 代碼如下 復制代碼

 

       $name=$_GET['username'];

       $pwd=$_GET['password'];   

       $sql="select * from users where username=? and password=?";

       //1.創建一個pdo對象

       $pdo=new PDO("mysql:host=localhost;port=3306;dbname=injection","root","");

       //2.設置編碼

       $pdo->exec("set names 'utf8'");

       //3.預處理$sql語句

       $pdoStatement=$pdo->prepare($sql);

       //4.把接收到的用戶名和密碼填入

       $pdoStatement->execute(array($name,$pwd));

       //5.取出結果

       $res=$pdoStatement->fetch();

       if(empty($res)){

              echo "用戶名或密碼輸入有誤";

       }else{

              echo "登錄成功";        

       }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved