有关代码的文档说明它必须位于<head>
内,并且只允许使用一个<base>
代码。
但是,此标记成功替换了相对链接的基本URL,即使它已放在<body>
内的某个位置。
在具有许多相对链接的支持服务单系统中注意到该行为。系统会呈现电子邮件,如果电子邮件的HTML代码包含<base>
标记,则在呈现电子邮件后,所有相对链接都会更改为标记中指定的基本网址。
Firefox,基于Chromium的浏览器,Edge确认了这一行为。 IE11忽略了它。您可以查看一个简单的示例here。
是否可以在不更改网站HTML标记的情况下防止此类行为?
答案 0 :(得分:2)
不要盲目地将电子邮件插入HTML文档。像对待XSS攻击的任何其他潜在来源一样对待它。
如果您要允许HTML,则通过基于DOM的白名单过滤器运行它(例如,如果您使用的是PHP,则为HTML Purifier)。
<base>
不应该被允许列入白名单。
答案 1 :(得分:1)
正如@Quentin建议的那样,保护HTML免受不必要的HTML的最好方法就是在显示它之前简单地删除它。不幸的是,有时这会破坏事情!与此特定示例中一样,如果用户发送了包含<base>
和相对链接的遗嘱,则删除该标记会破坏所有链接。
为了避免这种情况,可以使用iframe
。它们是沙箱外包代码的非常有用的工具。这不应该盲目使用......
至于回答OP,如果您无法控制用于阅读电子邮件的应用程序,您唯一的希望就是修补电子邮件本身。您可以在收件箱中创建一个挂钩,以便在将其放入受监控的收件箱之前删除任何不需要的HTML(使用@ Quentin的建议)。