2013-11-02 137 views
2

在我的博客,我让用户提交这样<a href="$">link text</a>无论他们投入将保持的“href”内部链接仅属性,即使他们尝试关闭“或>我用html_entity_decode()函数,然后filterd关键字javascript:在href属性中过滤XSS?

我的问题是:

  1. 是否足以防止JavaScript作为excuted
  2. javascript
  3. 数据URI data:能造成同样的威胁,它更好地过滤关键字?为javascript:
  4. 如果我筛选任何不以http开头的输入,https,ftp ...和(我需要这个)。够了吗?

我的主要问题是第4个。我对第一个3个问题的答案是肯定的/没有答案。

回答

3

最有可能的是而不是足够长期。看看HTML5 Security Cheatsheet,你会发现目前大多数XSS矢量都非常复杂,其中javascriptdata是频繁的目标。

所以你不能只依靠阻止已知的错误值(“如果它不以......开头”)。你应该只有允许改为已知的良好值(“它只是以......开头”)。

这不是那么难,因为你正在处理的URL的语法定义在RFC 3986,除了有点怪异的命名方案外,它对3.2节定义的大多数模式都很有帮助。您可以使用标准URL解析类之一(我可以推荐一些适用于Python的解析类),然后根据您的需要验证每个标记。

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