SQL注入面試

SQL注入是比較常見的網絡攻擊方式之一,它不是利用操做系統的BUG來實現攻擊,而是針對程序員編程時的疏忽,經過SQL語句,實現無賬號登陸,甚至篡改數據庫。sql注入中最多見的就是字符串拼接,研發人員對字符串拼接應該引發重視。html

SQL注入攻擊的整體思路
1.尋找到SQL注入的位置
2.判斷服務器類型和後臺數據庫類型
3.針對不通的服務器和數據庫特色進行SQL注入攻擊python

SQL注入
填好正確的用戶名和密碼後,點擊提交,返回測試界面。
由於根據咱們提交的用戶名和密碼被合成到SQL查詢語句當中以後是這樣的:
select * from app01_test where name='用戶名' and pwd='密碼';
很明顯,用戶名和密碼都和咱們以前給出的同樣,確定可以成功登錄。可是,若是咱們輸入一個錯誤的用戶名或密碼呢?很明顯,確定登入不了吧。恩,正常狀況下是如此,可是對於有SQL注入漏洞的網站來講,只要構造個特殊的「字符串」,照樣可以成功登陸。
好比:在用戶名輸入框中輸入:’or 1=1#,密碼隨便輸入,這時候的合成後的SQL查詢語句爲:
select * from app01_test where name='' or 1=1#' and pwd='';
語義分析:「#」在mysql中是註釋符,這樣井號後面的內容將被mysql視爲註釋內容,這樣就不會去執行了,換句話說,如下的兩句sql語句等價:
select * from app01_test where name='' or 1=1#' and pwd='';
等價於
select * from app01_test where name='' or 1=1
由於1=1永遠都是成立的,即where子句老是爲真,將該sql進一步簡化以後,等價以下select語句:
select * from app01_test
沒錯,該sql語句的做用是檢索users表中的全部字段
果不其然,咱們利用萬能語句(’or 1=1#)可以登陸!看到了吧,一個經構造後的sql語句竟有如此可怕的破壞力,相信你看到這後,開始對sql注入有了一個理性的認識了吧~mysql

3、攻擊原理程序員

正常登錄name框中填寫root,pwd爲123
上面sql_sel = " select * from app01_test where name='{0}' and pwd='{1}' 就至關於select * from app01_test where name=root and pwd=123 進行查詢正則表達式


若是name框中填寫root or 1=1 #,pwd 隨便輸入
上面sql_sel = " select * from app01_test where name='{0}' and pwd='{1}'
就至關於select * from app01_test where name=root or 1=1 # and pwd=123 進行查詢
這裏的#至關於把後面的全部查詢包括password查詢給註釋,而且 or 1 = 1的查詢永遠是正確的,因此sql攻擊注入就完成了sql

經過這樣的方式就繞過了密碼檢查
因此設計SQL語句時不建議這樣設計,或者對特殊字符 #、or、and 等作特殊處理數據庫

解決方式編程

args = (id, name)
sql = "select id, name from test where id=%s and name=%s"
cursor.execute(sql, args)
execute()函數自己有接受sql語句參數位的,能夠經過python自身的函數處理sql注入問題。
正確用法2:
name = MySQLdb.escape_string(name)
sql = "select id, name from test where id=%d and name='%s'" %(id, name)
cursor.execute(sql)
python模塊MySQLdb自帶針對mysql的字符轉義函數escape_string,能夠對字符串轉義。安全

1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,能夠經過正則表達式,或限制長度;對單引號和服務器

  雙"-"進行轉換等。

  2.永遠不要使用動態拼裝sql,可使用參數化的sql或者直接使用存儲過程進行數據查詢存取。

  3.永遠不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接。

  4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。

  5.應用的異常信息應該給出儘量少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝

  6.sql注入的檢測方法通常採起輔助軟件或網站平臺來檢測,軟件通常採用sql注入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。

轉載 https://www.cnblogs.com/fan-1994716/p/11899452.html。

相關文章
相關標籤/搜索