繁体   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