如何防范 HTML <base> 标签?

How to protect from HTML <base> tag?

有关标签的文档说它必须位于 <head> 内,并且只允许一个 <base> 标签。

但是,此标记成功地替换了相对链接的基础 URL,即使它被放置在 <body>.

中的某处

在具有许多相关链接的支持票系统中发现了该行为。系统渲染邮件,如果邮件的HTML代码中包含<base>标签,邮件渲染后,所有相关链接都变为标签中指定的基础URL。

已针对 Firefox、基于 Chromium 的浏览器、Edge 确认该行为。 IE11 忽略它。您可以查看一个简单示例 here.

是否可以在不更改网站 HTML 标记的情况下防止此类行为?

不要盲目地将电子邮件插入 HTML 文档。像对待 XSS 攻击的任何其他潜在来源一样对待它。

如果您要允许 HTML,则 运行 通过基于 DOM 感知白名单的过滤器(例如 HTML 净化器,如果您使用 PHP).

<base> 不应被列入白名单。

正如@Quentin 所建议的那样,保护您的 HTML 免受不需要的 HTML 影响的最佳方法是在显示它之前将其删除。不幸的是,有时这会破坏事情!就像在这个特定的例子中一样,如果用户发送了一份包含 <base> 和相关链接的遗嘱,删除标签会破坏所有链接。

为了避免这种情况,可以使用 iframe。它们是对外部代码进行沙盒处理的非常有用的工具。这个不要一味用强硬...

至于回答 OP,如果您无法控制用于阅读电子邮件的应用程序,您唯一的希望就是修改电子邮件本身。您可以在收件箱上创建一个挂钩,以在将其放入受监控的收件箱之前删除任何不需要的 HTML(使用@Quentin 的建议)。