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

來源:互聯網
上載者:User


方法一:密碼比對

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

代碼: 

 代碼如下 複製代碼

       $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 "登入成功";        

       }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.