2011-11-19 138 views
4

我有一個asp.net網站...最後幾天,我在日誌中看到我被攻擊與SQL注入這樣的:SQL注入攻擊

Exceptia: Error Caught in Application_Error event Error in: http://gramma.ro/Site/DetaliiProdus.aspx?c=m1&p=1465&s1=45&s2=79/**/or/**/[email protected]@version))-- 

當然會拋出一個異常,因爲我做任何SQL查詢之前檢查參數:

Error Message:Input string was not in a correct format. 

對於這一切我的異常將用戶重定向到一個特定的錯誤頁面。當然,這些攻擊現在不會影響我(我正在使用參數化的sql命令),但是我使用ips並將它們放在IIS - IP地址和域限制中,這樣ip不再可以訪問我的網站。

我的問題:是什麼我可以做什麼?看來,這個惡意用戶,即使我阻止他的IP,是怎麼回事,並試圖從另一臺IP相同的攻擊(我封鎖了過去三天約6 IPS是相當難看......)。你能建議我應該做的其他事情嗎?

UPDATE:所有這些攻擊把/**/or/**/[email protected]@version,而不是查詢參數值,所以我敢肯定攻擊它不是來自用戶,但真正的SQL注入攻擊的隨機問題。問題是,這些IP地址是從不同的位置,所以我不能並報一些互聯網服務提供商或主機企業...

+0

你控制你的應用程序的源代碼? (即是你的代碼或者是你運行一個封閉源代碼的應用程序),如果你擁有自己的代碼,然後扔在意想不到的查詢字符串例外,使用參數化的SQL命令等 – MatthewMartin

回答

2

這將提供保護,防止你已經展示了一個請求。要正確防範SQL注入,請儘可能地對所有查詢進行參數化,以驗證用戶輸入參數。

在我的代碼,我其實更進一步,在任何意想不到的查詢字符串,這使得API發現(這是這種攻擊是什麼),困難得多拋出異常。

添加這Global.asax中

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if(HttpContext.Current.Request.Url.ToString().Contains("@@version")) 
    { 
     throw new HttpException(400,"Bad Request"); 
    } 
} 
+0

延遲太大搜索每一個請求只是捕捉到一個要求在100000之間。更好的是保護輸入變量時,如果存在。 – Aristos

0

使用存儲過程您的應用程序。這樣可以防止SQL注入。因爲存儲過程只接受開發人員描述的有限參數。