2009-07-12 183 views
1

我正在VB.Net中構建一系列Web服務調用存儲過程的Web服務需要多少消毒處理?

每個Web服務都接受多個字符串值,執行一些驗證/處理,然後使用Linq to SQL調用存儲過程。某些字符串包含存儲在數據庫中的用戶數據:

從Web服務傳遞的這些字符串值將轉義爲陷入單引號字符,分號和各種括號類型。

我使用datacontext.spname(parameter1,parameter2)方法調用SP。

其目的是確保Web服務儘可能具有彈性,同時仍具有高性能。

我做了足夠的工作來防止SQL注入攻擊嗎?

回答

3

通常你是好人,但也有一些注意事項:

  • 小心使用sp_executesql的或者exec存儲特效的。你可以在param中傳入一個查詢並最終執行它。

  • 小心LIKE部分查詢會導致它們可以用%擴展,如果比喻爲param。

  • 網頁中使用的字段在發送之前可能需要一些額外的處理,以避免跨站點腳本。 (你也應該捍衛拉動信息出來的時候反對)

1

我知道一個事實,即LINQ到SQL查詢中的所有數據通過SQL參數發送到數據庫 - 它讓你從SQL注入安全。我不完全確定,但是由於LINQ抽象了存儲過程,它也很可能以相同的方式將參數傳遞給存儲過程。

這是什麼意思?您不必擔心對數據進行消毒,因爲LINQ會處理它。你當然可以用一個簡單的SQL注入類型的攻擊來測試它 - 就像無害的插入或選擇一樣。

0

如果你使用的參數,那麼你不需要作爲單引號進行消毒,其他sql注入nasties會爲你逃脫。

根據您存儲的數據,對輸入進行清理可能是一個壞主意。如果你存儲的東西最終嵌入到網頁中,並且你在數據錄入時對它們進行了編碼/清理,如果你的衛生代碼有bug,會發生什麼?最終數據庫中的數據會導致輸出出現問題,並且無法簡單地修復數據,而無需對所有數據進行更新。在輸出數據時進行消毒更好,因爲衛生代碼的更正會針對所有數據運行。如果這是一個問題,您還可以更輕鬆地在SQL中進行搜索。

我會限制Web服務顯然的東西,空和範圍檢查。