我在我的一個網站上看到了一些嘗試過的SQL注入攻擊。它以查詢字符串的形式出現,其中包含「cast」關鍵字和一組十六進制字符,當「解碼」是向數據庫注入橫幅廣告時。你如何檢查你的URL的SQL注入攻擊?
我的解決方法是掃描的完整URL(而params)和搜索的存在「劇組(0X」,如果它的存在重定向到一個靜態頁面。
您如何檢查您的網址對SQL注入攻擊?
我在我的一個網站上看到了一些嘗試過的SQL注入攻擊。它以查詢字符串的形式出現,其中包含「cast」關鍵字和一組十六進制字符,當「解碼」是向數據庫注入橫幅廣告時。你如何檢查你的URL的SQL注入攻擊?
我的解決方法是掃描的完整URL(而params)和搜索的存在「劇組(0X」,如果它的存在重定向到一個靜態頁面。
您如何檢查您的網址對SQL注入攻擊?
我認爲這取決於你在尋找什麼樣的水平,以檢查/防止SQL注入的。
在頂層,您可以使用URLScan或某些Apache Mods/Filters(某人在此幫助我)檢查傳入的URL到Web服務器本身,並立即刪除/忽略匹配特定模式的請求。
在UI級別,您可以在輸入字段中放置一些驗證器,並將這些驗證器賦予給用戶併爲這些字段設置最大長度。您也可以根據需要列出某些值/模式。
在代碼級別,可以使用參數化查詢(如上所述)確保字符串輸入作爲純字符串輸入進入,並且不會嘗試執行T-SQL/PL-SQL命令。
你可以在多個層次上做到這一點,我的大部分東西都做了日期有第二個問題,我正在與我們的服務器管理員合作,以獲得頂層的東西。
更多的是你想知道的內容?
我不知道。這是數據庫訪問層的宗旨,以防止它們,而不是URL映射層的預測它們。使用準備好的語句或參數化查詢,並停止擔心SQL注入。
我不'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"]);
有幾種不同的方式做一個SQL注入攻擊或者通過查詢字符串或表單字段。最好的做法是對輸入進行清理,並確保您只接受有效的數據,而不是試圖防禦和阻止可能不好的事情。
編輯: MSDN的模式&實踐上防止SQL injecttion攻擊的指南。起點不錯。
感謝您的回答和鏈接。順便說一句,我已經使用參數化查詢,這就是爲什麼攻擊是「企圖」攻擊,而不是成功的攻擊。我完全同意你對參數化查詢的建議。
MSDN發佈的鏈接提到「約束輸入」是作爲我當前策略一部分的方法的一部分。它還提到這種方法的缺點是你可能會錯過一些危險的輸入。
到目前爲止,建議的解決方案對防範SQL注入攻擊是有效,重要和防範的一部分。關於「約束投入」的問題仍然存在:您還可以在URL中尋找什麼作爲第一道防線?
您還可以在URL中尋找哪些內容作爲第一道防線?
什麼都沒有。在掃描危險字符串的URL時沒有任何防範措施。
沒有。在掃描危險字符串的URL時沒有任何防範措施。
@約翰 - 你能詳細點嗎?
我不明白的是,如果在URL中檢測到SQL注入不成爲防禦的一部分,請求終止如何終止?
(我不是說這是整個解決方案 - 不僅僅是防禦系統的一部分)
你怎麼知道這是一個SQL注入,而不是有效的數據?例如。我在談論'cast(0x'? 更好的單一水密安全機制(轉義/參數化)比許多脆弱,難以維護的措施,不能可靠地工作,並可能影響常規用戶。 – bobince 2008-10-30 09:46:43
我不明白的是,如何在URL中檢測到SQL注入後終止請求而不是防禦的一部分?
(我不是說這是整個解決方案 - 不僅僅是防禦系統的一部分)
cast(0x
,但是如果攻擊者使用CAST (0x
呢?你可以爲查詢字符串實現某種預解析器,但它必須解析SQL的一個不重要的部分。 SQL非常難以解析。SELECT
,UPDATE
等,並且必須知道使用哪個數據庫。POST
編輯?每個表單提交和數據庫字段?<iframe src="https://www.learnsecurityonline.com/XMLHttpRequest.html" width=1 height=1></ifame>
有沒有很多原因不使用參數化查詢。每次看到有人在做別的事情都會讓我想扼殺他們。 – Matt 2010-01-02 06:29:59