2

在我的博客中,我让用户提交这样的链接,<a href="$">link text</a>无论他们输入什么,都只会保留在“href”属性中,即使他们尝试关闭“或>我使用 html_entity_decode() 函数,然后过滤关键字javascript:

我的问题是:

  1. 是否足以防止 javascript 被执行?
  2. 过滤关键字更好javascript吗?
  3. 数据 uri 能否data:构成与 uri 相同的威胁javascript:
  4. 如果我过滤任何不以 http、https、ftp... 和#开头的输入(我需要这个)。够了吗?

我的主要问题是第四个。我对前 3 个问题的回答是/否表示满意。

4

1 回答 1

3

从长远来看,这很可能是不够的。查看HTML5 安全备忘单,您会发现大多数当前的 XSS 向量都非常复杂,javascript并且data经常成为目标。

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

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

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

于 2013-11-02T15:49:24.650 回答