2010-03-05 17 views
0

我有一些用C#編寫的WinForms應用程序(用於開發一些簡單應用程序的框架)。我以後的框架將用於開發勝利形式的應用程序。其他開發人員通常是開發人員,有時不使用參數 - 他們直接在代碼中編寫SQL。所以首先我需要以某種方式在C#中的框架基類中進行保護。 解決這個問題的時候,一位開發人員建議我使用一個像NHibernate這樣的ORM,它爲你處理這個問題(你大部分時間都不需要自己編寫SQL語句)。 所以我想問一下,當我想從SQL注入中獲得防禦時,是否有一些常規替代方案(其他方法和技術)。有些鏈接或示例會非常好。從SQL注入獲得防禦的方法和技巧

回答

1

我不明白如何保護任何基於SQL的庫免受開發人員的濫用而不會損害其功能(即不會直接訪問數據庫)。

即使使用NHibernate或Linq to SQL,也可以繞過映射層並直接編寫SQL語句。

我個人認爲,你最好的辦法是在BIG粗體文字是誰使用您的圖書館需要人蔘數他們的查詢寫。否則,你可能會嘗試做一些笨拙的輸入消毒,但這實際上是一個脆弱的二流破解。

參數化查詢已經存在了很長時間了,對於任何人編寫觸及任何數據庫的代碼都沒有意識到或理解如何使用它,沒有任何藉口。無知的唯一治療方法是教育。

也許如果我們知道更多關於這個庫應該是相對於數據訪問做,我們可以提供更多有針對性的建議...

1

同意Aaronaught,一個框架不會完全阻止的可能性。我絕不會在數據層上替換嚴格的驗證。還提供了一個圍繞數據訪問的抽象層,您可以將其作爲API進行開發,而不需要開發人員直接連接到數據庫。

+0

+1「用於提供數據訪問的抽象層,作爲API開放」 – 2010-03-05 22:07:37

1

這聽起來像你需要訓練你的開發人員使用參數綁定,而不是尋找技術解決方案。

另一個替代方法是將數據庫層保存在不同的項目中,並且只允許您的SQL Savy開發人員對其進行編碼。 GUI可以在不同的項目中。這樣GUI程序員不會搞亂你的數據庫。

0

安全通常是一個過程,而不是產品或API。 這也是一個不斷髮展的過程,我們必須適應或被黑客入侵。

一個專制的做法: 您可以強制大家寫存儲過程,而不是允許被允許跟 數據庫帳戶 直接訪問表。 (GRANT EXECUTE ON等)

然後,您需要確保沒有人編寫任何花哨的存儲過程 將sql查詢作爲參數並動態評估它。

這往往會減慢發展速度,我個人不會使用它, 但我已經諮詢過幾家商店。