簡體   English   中英

C#ASP.NET文本框雙重HTMLEncode和防止XSS

[英]C# ASP.NET textbox double HTMLEncode and Preventing XSS

我想防止XSS,所以在使用HTMLUtility.HtmlEncode對所有數據進行編碼之前,將其顯示在ASPNET TextBox中。 但是,我沒有顯示&的適當字符,而是看到&。

我該怎么解決?

謝謝!

摘自Microsoft的“ 如何:防止ASP.NET中的跨站點腳本”

過濾用戶輸入

如果您的頁面需要接受一定范圍的HTML元素,例如通過某種富文本輸入字段,則必須禁用該頁面的ASP.NET請求驗證。 如果有多個頁面可以執行此操作,請創建一個過濾器,該過濾器僅允許您要接受的HTML元素。 通常的做法是將格式限制為安全的HTML元素,例如粗體()和斜體()。

為了安全地允許受限制的HTML輸入

 Disable ASP.NET request validation by the adding the ValidateRequest="false" attribute to the @ Page directive. Encode the string input with the HtmlEncode method. **Use a StringBuilder and call its Replace method to selectively remove the encoding on the HTML elements that you want to permit.** 

基於此,最佳做法似乎是搜索和替換& 與&。 看起來不太優雅,但這直接來自MSDN。

您不必顯式編碼ASPNET TextBox。 對於文本框,輸出已經編碼。 如果再次對其進行編碼,它將被雙重編碼。 這就是為什么它顯示&

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM