在C#/ ASP.NET中是否有一种简单的方法来验证用户输入是否是防止XSS攻击的URL?

时间:2010-10-15 21:13:44

标签: c# asp.net xss

我们有一个插页页面会在人们离开我们的网站时发出警告。麻烦的是它需要查询字符串参数并盲目地生成页面,因此它容易受到XSS攻击。我的任务是修复它,我想做得对。

4 个答案:

答案 0 :(得分:3)

您应该致电Server.HtmlEncode以正确转义生成的HTML。

答案 1 :(得分:2)

是的,试试这个:

if(Uri.IsWellFormedUriString(url, UriKind.Absolute) && url.StartsWith("http"))
    Response.Write(string.Format("<a href=\"{0}\">{0}</a>",
        HttpUtility.HtmlEncode(url)));

答案 2 :(得分:1)

所以事情要做;

  1. 使用正则表达式
  2. 不假思索地使用HtmlEncode。
  3. 要做的事情;

    1. 将所有输入视为不受信任。
    2. 在输出之前对输入进行编码。但请确保您使用的是正确的编码类型。如果你将用户输入放在属性中,那么你使用HtmlAttributeEncode,如果它只是HTML然后你使用HtmlEncode,如果你把它放入JavaScript然后它是JavaScriptEncode。如果你的javascript将它放入div中,那么它就是HtmlEncode,然后是JavaScriptEncode。
    3. 考虑使用提供更多编码机制的AntiXSS,并使用安全列表方法,这本身就更安全。
    4. 将退出网址列入白名单,以便人们无法将此网页用作开放引荐来源。没有一个具有URL的参数,而是有一个GUID,它可以从数据库,会话表或其他任何内容中查找URL。
    5. (披露:我拥有AntiXSS)

答案 3 :(得分:1)

最好的方法是完全摆脱页面,只是接受它的网站,让它像一个网站。网站链接到其他资源,这就是网络拥有超过2亿个网站而不是大约12个网站的原因。

如果做不到这一点,最好的办法是从HtmlEncoding 开始作为快速修复,然后将其替换为ID,以便将其带到不同的网站。

但实际上,那些“你要离开的ZOMG!”页面太可怕了。它们甚至比为每个所谓的“外部”链接打开新标签的网站更糟糕。