PHP:測試SQL注入以及防止SQL注入

來源:互聯網
上載者:User

標籤:資訊   name   很多   ouya   dsl   方法   業務   log   prot   

 在寫登入註冊的時候發現了SQL和JS注入這個危害網站的使用者舉動:

測試方法:

SQL注入:

1 先來做一個測試:2 使用者名稱:’ or 1 #3 密碼:隨便寫8位以上4 驗證碼:寫正確

好吧,就那麼簡單就進去了:

概念

如果使用者在填寫表單或者其他資料的時候,通過一些特殊的資料形式,對SQL的行為作出了非法的影響,就叫作SQL注入!

基本原理

正常執行的sql語句:

1 select * from bg_admin where admin_name=‘zhouyang‘ and admin_pass=md5(‘12345678‘)

不正常執行的sql語句:

1 select * from bg_admin where admin_name=‘‘ or 1 #‘ and admin_pass=md5(‘123654uiykgjfhdsav‘)

 

拆分分析:

由於#在sql語句中是注釋符,所以,上面的SQL語句真正執行的是:

1 select * from bg_admin where admin_name=‘‘ or 1

 

很顯然,上面執行的結果就是where後面的條件永遠為真!其實就相當於:

1 select * from bg_admin

 

也就是說,只要bg_admin表中有正常的系統管理使用者,就可以查詢到資料!

 

其實,在這裡可以進行sql注入的“使用者名稱”還有很多,比如:

‘ or 1 or ‘

1 select * from bg_admin where admin_name=‘‘ or 1 or ‘‘ and admin_pass=md5(‘ewsdfgbnvb‘)

 

 

特彆強調:

1,  不僅僅是在使用者登入的時候,SQL語句可以被注入,其他任何使用者的資料只要參與執行,都有可能被注入!

2,  SQL注入的危害非常之大,有時候甚至可以刪除伺服器上的整個資料庫:

比如:

使用者名稱為:‘ or 1;drop database php2010;#

注意:

MySQL資料庫預設的有information_schema,所有資料庫的名稱等資訊都存放在裡面,這些資料庫很容易擷取到預設資料庫的名字!

解決方案

1,  在商務邏輯上預防,比如要求使用者名稱只能由特定的字元組成(比如數字字母底線)(使用Regex)

2,  使用PHP函數addslashes(最常用)

其中:

strip_tags(trim($data)是防止JS注入的!!
1    /**2      * 對使用者的資料進行安全過濾3      */4     protected function escapeData($data) {5         return addslashes(strip_tags(trim($data)));6     } 

 

3,  使用MySQL提供的資料轉義函數:mysql_real_escape_string($data, $link);不過有一個前提是必須串連上資料庫之後才可以使用!

4,  使用預先處理技術,因為預先處理是強制將sql語句的結構和資料部分分開!

PHP:測試SQL注入以及防止SQL注入

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.