如何防范 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 的建议)。
有关标签的文档说它必须位于 <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 的建议)。