2010-09-21 69 views
6

我來到一家公司,該公司已經有一個完全成長的項目......但是在我之前工作過的編碼器沒有遵循約定,也沒有使用參數化的SQL查詢......因此,結果已經結束1000個地方在一個非常大的項目,可能容易受到SQL注入...檢測SQL注入

我需要找到一個解決方案,將自動檢測代碼中是否有SQL注入。因此,例如,有一種表單允許用戶輸入關於產品的註釋,該註釋將在提交時發送到數據庫......我們如何確保用戶不會輸入有害的查詢而不是正常的文本?

是否有任何高級代碼/正則表達式/魔法可以檢測到該文本是否包含一段SQL查詢而不是普通的無害文本?我會接受任何鏈接,任何語言的代碼片段,甚至商業軟件都可以爲我做到這一點。

謝謝

+2

寫什麼項目? – 2010-09-21 20:17:32

+0

代碼是用VB.Net編寫的 – 2010-09-21 20:22:06

+1

如果你有1000個可能成爲問題的地方,那麼值得尋找自動化的方法來編輯代碼來使用參數化查詢。 – 2010-09-21 20:25:36

回答

7

這裏沒有銀彈。 SQL注入可能會以許多模糊的形式出現,並試圖使用正則表達式或防火牆中的其他形式來檢測它們,或者應用程序可以保護您免受最簡單的SQL注入形式的侵擾,但經驗豐富的黑客只會簡單地通過。正如AdaTheDev已經提到的那樣,檢查你的代碼的自動化工具,比如MS代碼分析工具,可能會給你一個啓動的機會,但是又沒有銀彈。你將需要通過你的整個應用程序。

當這是很多工作,你應該制定一個計劃。首先,制定一個指導方針,說明如何減輕這些類型的攻擊。還可以嘗試將應用程序分成幾部分,從非常關鍵到不太重要。通過這種方式,您可以更好地估計修復錯誤的成本,並且可以讓管理層決定可能的成本以及願意承擔的風險。未經身份驗證的用戶可以訪問的部分應用程序是最關鍵的。如果每個人(全世界都可以)在您的應用程序中創建一個帳戶,那麼這些用戶可以訪問的所有功能都非常關鍵。人口越少,越是信任這些用戶,風險就越小。稍後您可能會脫離修復這些部分。但永遠不要低估一個好黑客。他/她可能會損害具有高權限的用戶帳戶,並開始使用該帳戶測試SQL注入可能性。

總是試圖在防守戰略中有一個防守,有多個(或多個)防守層。例如,請不要在應用程序中以SA連接數據庫。創建一個只需要特權的帳戶,甚至可以創建多個SQL帳戶,每個角色(或每個角色組)一個帳戶。雖然限制數據庫的權限對於緩解風險有很大幫助,但再次強調,不要將其視爲單一防禦層。例如,This article解釋了黑客在能夠執行SQL注入時如何濫用較低權限的帳戶。

您在這裏問這個問題是令人欽佩的,因爲過去我見過很多開發人員,他們只是不想知道,這很可怕,因爲企業經常信任開發人員(這很可怕好)。

祝你好運。

0

我舉雙手贊成你願意深入探索並解決的事情,而不是隻是聳聳肩說,「EHH ..沒有人會攻擊反正我們的網站。」

我認爲,也許最好的方法是假設他們是無辜的,全面消毒投入。問題是,可能有合法理由讓某人輸入任何可能觸發SQL注入的字符。

只是試圖檢測這種模式將受到誤報'攻擊'結果;也許有人試圖尋找john's car,完全不知道單引號可能是'壞'。也許他們確實需要尋找。或者,你有什麼...

+0

我同意。在安裝鬧鐘之前開始查看這些窗口! – 2010-09-22 06:36:00

0

你需要檢查變量傳遞到SQL字符串的任何地方。對於字符串值,您必須用雙引號替換單引號的每個實例。對於非字符串值(將傳遞給SQL的引號),您必須確保它們是強類型的。

E.g.不要通過像"SELECT * FROM Users WHERE UserID = " + my_string_user_id這樣的東西。相反,請使用代碼"SELECT * FROM Users WHERE UserID = " + userId_as_int

當我有一個類似的代碼庫而沒有參數化查詢的時候,這個工作就回來了。

+0

更糟糕的是在'sa'下運行SQL訪問(連接字符串用戶)。 – 2010-09-22 06:38:41

4

爲了真正做到這一點,您需要將應用程序分開,然後通過一個模塊/頁面/類/一次完成任何操作。

這將使您不僅可以解決問題,而且可以更加熟悉代碼庫。

UPDATE
基礎上的評論,我想補充一點:

的工具可以做的是說一下,這裏的唯一事情是一些unsanitized投入......其中,最有可能的是將在你的應用程序中的每一個查詢。這意味着您將擁有約3000個左右需要修復的文件列表。

在這一點上,你唯一能做的就是指定一天,比如星期五,作爲Fix Sql Day。劃分工作,然後讓每個人花費一天(甚至幾個小時)在幾頁上重寫查詢。

在某些時候,你會完成或找到足夠的其他事情來確定是否重新開始是一個好主意。

+0

當存在1-300個文件時,這是一個好主意......因爲我們有超過3000個文件,其中一半可能包含嚴重寫入的SQL ......不幸的是要花費一個多月的時間才能修復所有文件......我們的口袋裏沒有那麼多時間。 – 2010-09-21 20:38:14

3

你可以給MS Code Analysis Tool一掄這(報價):

CAT.NET是一個二進制代碼分析工具 ,幫助識別 某些現行漏洞 常見的變異,可引起常見的攻擊 向量,如跨站點腳本 (XSS),SQL注入和XPath 注入。

從來沒有用過它,但可能值得一試。