使用js

时间:2015-08-25 13:21:25

标签: javascript url encoding xss

我有一个url参数,可以是: “http://www.example.net” 要么: 的javascript:警报(的document.cookie)

如果我使用encodeURIComponent来避免xss攻击,那么合法网址就会被破坏,如果我使用的是encodeURIComponent,则不会处理xss攻击(冒号通过)。什么是避免xss攻击并保持url有效的最佳方法?

2 个答案:

答案 0 :(得分:2)

我认为,有两个主要选择:

  1. 您可以制作允许参数的白名单,而不必为实际传递的网址做任何事情而烦恼。换句话说,您可以执行类似?url=example的操作,并将其重定向到http://www.example.com(如果它位于白名单中)。要明确的是,这些是别名,而不是您只假设站点的前缀和tld的规则。这有助于确保您不会受到open-redirects和XSS。

  2. 的攻击
  3. 如果维护此类列表不可行,您可以制定一条规则,即您只能使用某些域(可能只是与该站点相同的域)。至少你可以验证该方案是http|https,但你仍然容易受到开放重定向的影响,但至少他们无法通过该参数对你的页面进行XSS。

答案 1 :(得分:2)

如果要阻止“javascript:”协议链接,可以使用正则表达式进行检查,以确保仅使用http:https:或相对URL。最好将允许的协议列入白名单,而不是阻止禁止的协议。 encodeURIComponent函数用于向URI的查询字符串添加参数,这不是我想要的。

urlRE=/^(?:https?:)?[^\s:]+$/
urlRE.test("javascript:alert(document.cookie)")
//false
urlRE.test("http://www.example.net")
//true