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

时间:2016-05-05 15:40:04

标签: c# asp.net

我想阻止XSS,所以我在使用HTMLUtility.HtmlEncode对所有数据进行编码,然后在ASPNET TextBox中显示它。但是,我没有为& 显示正确的字符,而是看到&安培;

我该怎么办才能修复它?

谢谢!

2 个答案:

答案 0 :(得分:0)

取自微软的How To: Prevent Cross-Site Scripting in ASP.NET

  

过滤用户输入

     

如果您的网页需要接受一系列HTML元素,请使用   例如,通过某种富文本输入字段,您必须禁用   页面的ASP.NET请求验证。如果你有几页   这样做,创建一个只允许HTML元素的过滤器   你想接受。通常的做法是将格式限制为   安全的HTML元素,如bold()和italic()。

     

安全地允许受限制的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.**

基于此,似乎最佳做法是搜索和替换&放大器;与&amp ;.看起来不是很优雅,但这直接来自MSDN。

答案 1 :(得分:0)

您不必显式编码ASPNET TextBox。对于文本框,输出已经编码。如果再次对其进行编码,它将被双重编码。这就是为什么它显示&