【常見Web應用安全問題】---2、SQL Injection

 Web應用程序的安全性問題依其存在的形勢劃分,種類繁多,這裏只介紹常見、比較常見和有點常見的。

 常見Web應用安全問題安全性問題的列表:

  1、跨站腳本攻擊(CSS or XSS, Cross Site Scripting)
  2、SQL注入攻擊(SQL injection)
  3、遠程命令執行(Code execution,個人覺得譯成代碼執行並不確切)
  4、目錄遍歷(Directory traversal)
  5、文件包含(File inclusion)
  6、腳本代碼暴露(Script source code disclosure)
  7、Http請求頭的額外的回車換行符注入(CRLF injection/HTTP response splitting)
  8、跨幀腳本攻擊(Cross Frame Scripting)
  9、PHP代碼注入(PHP code injection)
  10、XPath injection
  11、Cookie篡改(Cookie manipulation)
  12、URL重定向(URL redirection)
  13、Blind SQL/XPath injection for numeric/String inputs
  14、Google Hacking


SQL注入攻擊(SQL injection)

  早在十幾年前,基於數據庫的Web應用剛剛盛行的時候,幾乎所有的開發商都忽略了SQL注入弱點,導致當時絕大多數的網站的登錄入口形同虛設!爲什麼呢?先給一個小小的例子,假如以下SQL代碼是用來在網站登錄入口入執行用戶驗證時的查詢代碼:
SELECT count(*)
FROM users_list_table
WHERE username='USERNAME'
AND password='PASSWORD'

以上的USERNAME就是我們登錄時提供的用戶名,PASSWORD就是我們登錄時提供的密碼。當用戶輸入正確的用戶名和密碼時,這條語句的執行結果將爲真(True),否則爲假(False),當然爲真時我們就認爲認證通過,爲假時就認爲認證失敗,即非法登錄。試想一下,如果我在輸入用戶名和密碼的時候輸入如下的內容:
用戶名:a' or 'a'='a
密碼:a' or 'a'='a    
用代入法把用戶名和密碼輸入值代入到上述的SQL腳本里結果如下:
SELECT count(*)
FROM users
WHERE username='a' or 'a'='a'
AND password='a' or 'a'='a'

相信稍懂一點兒SQL語句的人都知道,這條語句的執行結果就永遠是真了!此時你不需要有帳號,就直接登錄成功了!你對此漏洞理解的深度同樣取決於你的對SQL語句的技能和web安全知識能力。一個具有良好技能的攻擊者可能利用此漏洞獲取後臺DB的結構並逐步獲取DB的信息。
總結一下:SQL注入弱點是存在基於數據庫的Web應用中,黑客利用精心組織的SQL語句,通過Web接口(通常指我們的Web頁面的表單)注入的Web應用中,從而獲取後臺DB的訪問與存取權的一種安全弱點。

  簡要的解決方案:

  剛剛介紹了XSS,在這裏關於SQL Injection我想就無需多說了,都是過濾、合法性檢查和長度限制等通用方法。
  有沒有注意到,XSS和SQL Injection,雖然名字不一樣,但它們似乎都屬於我前一篇文章《解讀Web安全性問題的本質》中的第一部分,即輸入/輸出驗證。下面將要介紹的遠程命令執行目錄遍歷文件包含同樣也是輸入/輸出驗證問題。


來自CSDN,原文出處:http://blog.csdn.net/iwebsecurity/article/details/1693877

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章