2009-09-01 107 views

回答

4

參數化查詢時,才需要如果你是動態生成使用從數據的查詢。用戶。

有使用上的東西,如Oracle,這也是有用的這些查詢的好處。

別的東西,你能做的就是確保連接到數據庫的用戶有權限最少需要。

你可以看看這裏的一些建議,關於防範SQL注入: http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

根據您的偏執狂,你可以只使用存儲過程來做到這一點接入,但是,如果你需要動態查詢更加困難。

,您可選擇可以使用視圖,這樣,它是不可能的,除非你有看法觸發器,使用該查詢更改數據庫中的任何數據。

可以使用另外一個頁面是在這裏: http://www.wwwcoder.com/Directory/tabid/68/type/art/site/2966/parentid/258/Default.aspx

但是,有在把更多的安全性比是合理的沒有意義的,所以你應該權衡你的保護和能走多遠。

例如,它是否值得加密你的一些列?這導致了更多關於如何保護密鑰的問題,但是,如果您擔心有人盜用您的機器並獲取可能需要考慮的數據庫文件。

7

如果您使用參數化查詢,那麼您不需要執行您在帖子中描述的任何內容。 This article似乎是一個關於這個問題的很好的討論。

要重申爲重點,銀子彈用於防止SQL注入攻擊是通用戶輸入到通過參數化查詢SQL。

+0

我喜歡明確的「我在精煉過程這篇文章」 – 2009-09-01 22:21:00

+0

@Rex中號:*臉紅* – 2009-09-01 22:23:05

+1

+1除了用過的參數化查詢之外,沒有必要做任何事情。所有的安全工作都爲你完成。嘗試做額外的工作去除引號在參數後是完全沒有用的。 – 2009-09-01 22:38:42

1

確保所有輸入都包含在引號中。如果你有類似......接受= 1或年齡= 30 ......你可能在那裏有一個安全漏洞:......接受= 1; DELETE ....

編輯:是的攻擊者可以使用1" ;刪除,但不以逃脫輸入工作

+2

攻擊者也可以只包括一個引號:'「; DROP TABLE ...' – 2009-09-01 22:23:00

+0

該死的......這就是我花了我的時間來輸入我的評論:) – 2009-09-01 22:25:24

+0

雷克斯M,他已經表示他正在逃避「所以,所以這種方法是行不通的。如果輸入是逃脫,那不行? – 2009-09-01 22:30:20

0

cyberpunk可以通過串聯從uri查詢中獲得perl shell。 3個解決方案是使用存儲過程,準備語句或gql代替。

+0

「cyberpunk」 - 哇,這是我一會兒沒有聽到的一個詞。 – 2009-09-02 00:09:50

3

從技術上講,Javascript和HTML與SQL注入攻擊無關,但它們是注入式攻擊。

我不同意剝離,至少在不通知用戶您已經這樣做的情況下。首先,實際輸入可能實際上是有效的,刪除某些字符可能實際上改變了輸入的語義,並且通常無法確定在存儲時間該值可能會被渲染到的每個媒介。 URL,LDAP,XML或文件路徑注入攻擊如何?

你會發現很多安全「牧師」(我說的鸚鵡),認爲SQL注入是最好的保護通過剝離可能導致輸入數據損害的字符。只要你不接受O'Brian作爲例證的有效輸入,那就沒事了。如果他們宣傳了正確的編碼方式會更好,因爲所有這些努力都可能被用來解決大量的注入攻擊。

其實我曾經處理由誰寫的東西像MS安全專家編寫的代碼:

userInput = userInput.Replace( 「 - 」, 「」).Replace( 「'」, 「」 );

公平對待他人他是一個非常聰明的傢伙,我相信他今天不會寫這篇文章,但是你能看到「MyName -'- SELECT * FROM User」實際上是否可以解決這個問題嗎?

您可以接受的字符範圍很好,而只要您不阻止有效值,您就不會有其他字符。 <也是一個有效的數學運算符,或者用戶需要輸入示例HTML代碼。價值的上下文決定什麼是有效的,什麼不是。

然後,如果您獲得包含不允許的字符的值,則向用戶顯示一條錯誤消息,告訴他們有關無效值的信息,並要求他們在重新發送前修復它。這可以在以後節省很多痛苦,這與數據驗證一樣多,並確保您的程序功能與安全性相關。是的,你需要在客戶端檢查這一點,以防止流量下降,並在服務器端防止攻擊。

然後,只要您的渲染值適當地進行編碼。參數化查詢適用於解決SQL注入問題,但它們不適用於呈現HTML,URL和JavaScript。正確的SQL編碼值(例如您提到的雙引號)同樣安全,在某些情況下更可取(假設您有合理的DBA,他們並不堅持所有內容都必須是存儲過程並允許正確編碼的動態SQL)。

另一點,System.Web HTML和URL編碼函數有一些缺陷。有一個Microsoft團隊製作瞭解決這些問題的Anti Cross Site Scripting庫,並提供了更具體的編碼選項。我認爲它叫做Anti-XSS或類似的東西。絕對值得一看。我想知道它是否被納入.Net 4?

0

參數化查詢爲保持壞人走了很長的路,但要確保他們背後沒有奇怪的,可注入的動態sql組合,以打開新的漏洞。

其他,狂人的想法:不運行流行的開源軟件包,尤其是那些寫在語言與P.開始

相關問題