在href属性中过滤XSS?

时间:2013-11-02 06:51:15

标签: javascript xss

在我的博客中,我让用户提交此<a href="$">link text</a>之类的链接,只要他们输入的内容只保留在“href”属性中,即使他们尝试关闭“或&gt;我使用html_entity_decode()函数,然后过滤了关键字javascript:

我的问题是:

  1. 是否足以阻止javascript被执行?
  2. 过滤关键字javascript
  3. 是否更好?
  4. 数据uri data:可能构成与javascript:相同的威胁吗?
  5. 如果我过滤任何不以http,https,ftp ...和开头的输入(我需要这个)。这够了吗?
  6. 我的主要问题是第4个问题。前三个问题的答案是肯定/否定,我很好。

1 个答案:

答案 0 :(得分:3)

从长远来看,很可能足够。看一下HTML5 Security Cheatsheet,您会发现大多数当前的XSS向量非常复杂,javascriptdata是常见目标。

因此,您不能仅仅依靠阻止已知的错误值(“如果它不以...开头”)。你应该只允许已知的好的值(“它只是以......开头”。)

这并不困难,因为您正在处理其语法在RFC 3986中定义的URL,除了有点奇怪的命名方案之外,它对3.2节中定义的大多数模式非常有帮助。您可以使用标准URL解析类之一(我可以为Python推荐一些),然后根据您的需要验证每个令牌。

请记住,#在RFC中称为“片段”。