我正在研究如何使用.NET来防止XSS攻击,并遇到了以下编码数据的方法:
string asdf = WebUtility.UrlEncode(code);
string asdf1 = HttpUtility.UrlEncode(code);
string asdf1a = HttpUtility.UrlEncodeUnicode(code); // OBSOLETE
string asdf1b = HttpUtility.UrlPathEncode(code);
string asdf1c = Uri.EscapeDataString(code);
string asdf1d = Uri.EscapeUriString(code);
string asdf1e = HttpUtility.HtmlEncode(code);
string asdf1f = HttpUtility.HtmlAttributeEncode(code);(我省略了byte[]方法.但还有更多)
考虑到这些方法中的每一种都以完全不同的方式工作,并且位于完全不同的类中,我会假设在错误的选择组合中很容易引起XSS问题。
对于给定的情况,什么时候使用给定的编码方法比较合适?为什么?
发布于 2014-03-04 15:49:50
这是防止ASP.NET中XSS的某种来源(至少来自微软):
从这篇专门针对你的问题的文章中可以收集到一些重要的东西:
HttpUtility.HtmlEncode方法包含来自用户或其他来源(如数据库)的输入,则使用该方法对输出进行编码。HttpUtility.UrlEncode对它们进行编码。关于HTMLAttributeEncodeHTMLAttributeEncode:
HtmlEncode方法快得多。HtmlAttributeEncode方法的字符串结果应该仅用于双引号属性。当使用带有单引号属性的HtmlAttributeEncode方法时,可能会出现安全性问题。最后,对于UriEscapeStringUriEscapeString,如果您要转义的是URIURI,请使用它。这个问题讨论了UriEscapeString和UriEscapeDataString的区别。
https://security.stackexchange.com/questions/52699
复制相似问题