2011-08-21 62 views
4

被Ruby on Rails(3)寵壞了,我希望我所有的HTML輸出都能被自動編碼。在ASP.NET中自動HtmlEncode

我問了這個question about script exploits更早一點,現在想知道,有沒有一些ASP.NET的設置,插件或擴展,將自動導致所有的HTML爲HtmlEncode'編輯或我必須非常小心,並確保我自己?

回答

4

各種ASP.NET控件都會自動使用HtmlEncode對HTML進行編碼(還有一些使用UrlEncode進行URL編碼),但它不是通用的。以下是控件列表以及它們自動執行的編碼(如果有)。我不知道這是否對.NET 4.0或不更新:

Which ASP.NET Controls Automatically Encodes?(此鏈接會提示您保存文檔)

這是上面的文件是從博客:

http://blogs.msdn.com/b/sfaust/archive/2008/09/02/which-asp-net-controls-automatically-encodes.aspx

它最初發佈於2008年9月,因此它可能是2.0版本,但不一定是4.0。儘管如此,IMO仍然是一個有用的資源。

你也應該看看Microsoft Anti-Cross Site Scripting Library 3.1

正如balexandre指出,看來現在ANIT-XSS庫是開源的Web防護庫的一部分:

Microsoft Web Protection Library

而且,OWASP是安全信息的好資源,他們企業安全API項目(ESAPI)以各種編程語言提供(在不同程度上)。我相信.NET的一個並不完整。

OWASP Enterprise Security API

+0

@balexandre的HTMLEncode的userinput自己的服務器上,防XSS庫是一個開源的舉措,但不支持/認可我的M $? – Zabba

+0

據我所知,微軟的Anti-XSS Library不是**開源的,但它肯定支持(我認爲是由微軟開發)。 – Tim

+0

我認爲它是開源的,因爲@balexandre在編輯你的答案時鏈接到[this](http://wpl.codeplex.com/) – Zabba

3

如果您使用ASP.NET 4.0 Web窗體,然後使用代碼塊<%: %>會自動的HTMLEncode輸出。如果您使用Razor引擎,則默認情況下所有數據均爲HtmlEncoded。

+0

Razor是否與WebForms或ASP.NET MVC一起使用? – Zabba

+0

Razor是一個引擎視圖,不,你不能在Webforms上,持有...是的,你可以;)P​​LZ閱讀 - > http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx – balexandre

1

默認情況下,ASP.Net將不接受Inputcontrol包含html元素的回傳。此行爲由屬性ValidateRequest在頁面級別設置。

如果你想接受含有HTML回傳,你需要ValidateRequest設置爲false,在進一步討論之前

+0

有趣的知道,謝謝 – Zabba

+0

「需要」我的意思是「應該」。您可以禁用EnableEventValidation並接受包含html的回傳並將其再次打印出來(例如在評論系統中)。所以ASP.Net不會阻止你這樣做,但在這種情況下,最好在打印出來之前對用戶輸入進行HTM編碼。 – citronas

+0

@citronas,您錯誤地引用了EnableEventValidation屬性而不是ValidateRequest。 EnableEventValidation用於與ASP.NET在下拉列表或其他列表控件中回發時接受的值有關的一組不同的功能。我試圖編輯你的答案是正確的,但它被拒絕了。 –