如何保护HTML <base />标签?

时间:2017-10-30 09:21:02

标签: html base

有关代码的文档说明它必须位于<head>内,并且只允许使用一个<base>代码。

但是,此标记成功替换了相对链接的基本URL,即使它已放在<body>内的某个位置。

在具有许多相对链接的支持服务单系统中注意到该行为。系统会呈现电子邮件,如果电子邮件的HTML代码包含<base>标记,则在呈现电子邮件后,所有相对链接都会更改为标记中指定的基本网址。

Firefox,基于Chromium的浏览器,Edge确认了这一行为。 IE11忽略了它。您可以查看一个简单的示例here

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

2 个答案:

答案 0 :(得分:2)

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

如果您要允许HTML,则通过基于DOM的白名单过滤器运行它(例如,如果您使用的是PHP,则为HTML Purifier)。

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

答案 1 :(得分:1)

正如@Quentin建议的那样,保护HTML免受不必要的HTML的最好方法就是在显示它之前简单地删除它。不幸的是,有时这会破坏事情!与此特定示例中一样,如果用户发送了包含<base>和相对链接的遗嘱,则删除该标记会破坏所有链接。

为了避免这种情况,可以使用iframe。它们是沙箱外包代码的非常有用的工具。这不应该盲目使用......

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