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

C#ASP.NET文本框双HTMLEncode和防止XSS,c#,asp.net,C#,Asp.net,我想防止XSS,所以我使用htmlity.HtmlEncode对所有数据进行编码,然后再将其显示在ASPNET文本框中。但是我看到的不是为和显示正确的字符,而是& 我该怎么做才能修好它 谢谢大家! 摘自微软的 过滤用户输入 如果您有需要接受一系列HTML元素的页面,例如 例如,通过某种富文本输入字段,必须禁用 页的ASP.NET请求验证。如果你有几页 要做到这一点,请创建一个只允许 你想接受。通常的做法是将格式限制为 安全的HTML元素,如粗体()和斜体() 安全地允许受限HTML输入 D

我想防止XSS,所以我使用
htmlity.HtmlEncode
对所有数据进行编码,然后再将其显示在ASPNET文本框中。但是我看到的不是为显示正确的字符,而是&

我该怎么做才能修好它

谢谢大家!

摘自微软的

过滤用户输入

如果您有需要接受一系列HTML元素的页面,例如 例如,通过某种富文本输入字段,必须禁用 页的ASP.NET请求验证。如果你有几页 要做到这一点,请创建一个只允许 你想接受。通常的做法是将格式限制为 安全的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文本框进行编码。对于文本框,输出已编码。如果您再次编码,它将被双重编码。这就是为什么它显示&

你是说用&;替换&;?因为用&替换&不会有多大作用……是的。编辑时,它保留了正确的文本,所以我只是修复了它。我不知道是amp->&还是&->amp。