2009-07-19 49 views
3

個人而言,我嘗試編寫安全的ASP.NET代碼。然而,我曾經爲註冊服務機構工作(高欺詐目標),所以我對寫的代碼變得十分偏執。是否有任何ASP.NET功能我應該仔細審查(除了SQL訪問 - 我知道不要做動態SQL)。哪些ASP.NET命令可能導致不安全的代碼?

回答

4

這是一個很好的MSDN文章:Security Practices: ASP.NET 2.0 Security Practices at a Glance

摘錄:

如何防止跨站腳本

驗證輸入和輸出編碼。 通過驗證輸入的類型,長度,格式和範圍來限制輸入。使用 的HttpUtility.HtmlEncode方法 編碼輸出,如果它包含來自用戶的輸入 ,諸如從形式 字段,查詢字符串和餅乾或從其他來源 ,如數據庫的輸入。 不要只是將輸入回送給用戶 而不驗證和/或編碼 數據。以下示例顯示如何編碼一個表單字段 。

Response.Write(HttpUtility.HtmlEncode(Request.Form["name"])); 

如果返回包含 輸入到客戶端的URL字符串,請使用 HttpUtility.UrlEncode方法編碼 這些URL字符串,如下所示。

Response.Write(HttpUtility.UrlEncode(urlString)); 

如果您有需要接受 一系列的HTML元素的網頁,如 通過某種富文本輸入 場,你必須禁用ASP.NET 請求驗證的頁面。

打開自定義錯誤,以保持誤差私人

<customErrors mode="On" defaultRedirect="YourErrorPage.htm" /> 
+0

感謝米奇!我很感謝您的迴應,但是...您給出的回覆讓我相信這是針對非轉義SQL或非DB驅動代碼的一種對策。原因是它都是基於用戶輸入的存儲。 此外,根據我的經驗,URLEncoding往往會「過度編碼」,因爲它必須訂閱URL編碼規則(非常嚴格)。 此外,與ASP.NET我嘗試避免任何Response.Writes。我發現ASP.NET代碼infront控件爲我的HTML提供了更好的結構意識。 雖然我會給你+1,因爲你仍然在技術上有效:) – Thunder3 2009-07-19 03:15:08

1

決不相信用戶的輸入。永遠不要假設客戶端驗證可以防止錯誤的輸入數據。始終確保您的web.config中的ValidateRequest =「true」和EnableEventValidation =「true」:

請參閱Request ValidationASP.NET Security Tutorials

相關問題