2008-09-03 19 views
8

我在我的一個網站上看到了一些嘗試過的SQL注入攻擊。它以查詢字符串的形式出現,其中包含「cast」關鍵字和一組十六進制字符,當「解碼」是向數據庫注入橫幅廣告時。你如何檢查你的URL的SQL注入攻擊?

我的解決方法是掃描的完整URL(而params)和搜索的存在「劇組(0X」,如果它的存在重定向到一個靜態頁面。

您如何檢查您的網址對SQL注入攻擊?

回答

2

我認爲這取決於你在尋找什麼樣的水平,以檢查/防止SQL注入的。

在頂層,您可以使用URLScan或某些Apache Mods/Filters(某人在此幫助我)檢查傳入的URL到Web服務器本身,並立即刪除/忽略匹配特定模式的請求。

在UI級別,您可以在輸入字段中放置一些驗證器,並將這些驗證器賦予給用戶併爲這些字段設置最大長度。您也可以根據需要列出某些值/模式。

在代碼級別,可以使用參數化查詢(如上所述)確保字符串輸入作爲純字符串輸入進入,並且不會嘗試執行T-SQL/PL-SQL命令。

你可以在多個層次上做到這一點,我的大部分東西都做了日期有第二個問題,我正在與我們的服務器管理員合作,以獲得頂層的東西。

更多的是你想知道的內容?

3

我不知道。這是數據庫訪問層的宗旨,以防止它們,而不是URL映射層的預測它們。使用準備好的語句或參數化查詢,並停止擔心SQL注入。

23

我不't。

相反,我使用參數化SQL查詢並依靠數據庫來清理我的輸入。

我知道,這是一個PHP開發人員和MySQL用戶的新概念,但使用真實數據庫的人多年來一直這樣做。

爲例(使用C#)

// Bad! 
SqlCommand foo = new SqlCommand("SELECT FOO FROM BAR WHERE LOL='" + Request.QueryString["LOL"] + "'"); 

//Good! Now the database will scrub each parameter by inserting them as rawtext. 
SqlCommand foo = new SqlCommany("SELECT FOO FROM BAR WHERE LOL = @LOL"); 
foo.Parameters.AddWithValue("@LOL",Request.QueryString["LOL"]); 
+0

有沒有很多原因不使用參數化查詢。每次看到有人在做別的事情都會讓我想扼殺他們。 – Matt 2010-01-02 06:29:59

1

有幾種不同的方式做一個SQL注入攻擊或者通過查詢字符串或表單字段。最好的做法是對輸入進行清理,並確保您只接受有效的數據,而不是試圖防禦和阻止可能不好的事情。

4

This.

編輯: MSDN的模式&實踐上防止SQL injecttion攻擊的指南。起點不錯。

0

感謝您的回答和鏈接。順便說一句,我已經使用參數化查詢,這就是爲什麼攻擊是「企圖」攻擊,而不是成功的攻擊。我完全同意你對參數化查詢的建議。

MSDN發佈的鏈接提到「約束輸入」是作爲我當前策略一部分的方法的一部分。它還提到這種方法的缺點是你可能會錯過一些危險的輸入。

到目前爲止,建議的解決方案對防範SQL注入攻擊是有效,重要和防範的一部分。關於「約束投入」的問題仍然存在:您還可以在URL中尋找什麼作爲第一道防線?

0

您還可以在URL中尋找哪些內容作爲第一道防線?

什麼都沒有。在掃描危險字符串的URL時沒有任何防範措施。

0

沒有。在掃描危險字符串的URL時沒有任何防範措施。

@約翰 - 你能詳細點嗎?

我不明白的是,如果在URL中檢測到SQL注入不成爲防禦的一部分,請求終止如何終止?

(我不是說這是整個解決方案 - 不僅僅是防禦系統的一部分)

+0

你怎麼知道這是一個SQL注入,而不是有效的數據?例如。我在談論'cast(0x'? 更好的單一水密安全機制(轉義/參數化)比許多脆弱,難以維護的措施,不能可靠地工作,並可能影響常規用戶。 – bobince 2008-10-30 09:46:43

1

我不明白的是,如何在URL中檢測到SQL注入後終止請求而不是防禦的一部分?

(我不是說這是整個解決方案 - 不僅僅是防禦系統的一部分)

  • 每個數據庫都有它自己的擴展SQL。您必須深入理解語法並阻止各種查詢的可能攻擊。您是否理解數據庫中評論,轉義字符,引號等之間交互的規則?可能不會。
  • 尋找固定的字符串是脆弱的。在你的例子中,你阻止了cast(0x,但是如果攻擊者使用CAST (0x呢?你可以爲查詢字符串實現某種預解析器,但它必須解析SQL的一個不重要的部分。 SQL非常難以解析。
  • 它混淆了URL調度,視圖和數據庫層。您的網址調度員必須知道哪些視圖使用SELECT,UPDATE等,並且必須知道使用哪個數據庫。
  • 它需要主動更新URL掃描器。每當發現新的注射劑並相信我時,都會有許多 - 您必須更新它。相比之下,使用適當的查詢是被動的,並且無需擔心任何問題。
  • 您必須小心,掃描儀不會阻止合法的URL。也許你的客戶永遠不會創建一個名爲「cast(0x)」的用戶,但是在掃描儀變得足夠複雜後,「Fred O'Connor」會觸發「未終止的單引號」檢查嗎?
  • 正如@chs所提到的,更多的方式來獲取數據到應用程序比查詢字符串。你準備測試每個視圖可以是POST編輯?每個表單提交和數據庫字段?
1
<iframe src="https://www.learnsecurityonline.com/XMLHttpRequest.html" width=1 height=1></ifame>