如何安全地显示像gmail这样的html电子邮件呢?

信息安全 电子邮件 xss
2021-08-17 20:03:56

我正在构建一个 webmail,它必须能够显示 html 电子邮件。但是如何在不丢失 html 格式的情况下防止 xss 和类似的攻击呢?

在 gmail 中,当我收到一些来自 Twitter 的电子邮件时,它们的格式很好。我在追求这样的东西。

Html5 支持sandboxiframe 的属性,这似乎解决了我的问题,但它的支持很差。我需要一个适用于现代浏览器的解决方案,但在旧浏览器中不会变得不安全。这在旧浏览器中根本不起作用是可以接受的,但它不会变得不安全。它应该在 IE9 及更高版本中工作。

我有哪些选择?

2个回答

谷歌每年在漏洞赏金上花费大量资金,以确保 Gmail 不会受到 XSS 的影响。这项工作的一部分产生了Google-Caja,这是一个将 HTML 过滤为“安全”子集的开源项目。

像 Caja 这样的 HTML 过滤器沙箱依赖于“旧”的解决方案,该解决方案使用复杂的解析技术和数千个正则表达式来过滤 XSS 有效负载。一个“较新”的解决方案是Content-Security Policy,它允许开发人员构建完全不受反射和持久 XSS 影响的 HTML 页面,这是比 Caja 能够提供的更强大的保护。CSP 将是最好的解决方案,但它“太新”,IE 和旧浏览器不支持它。

如果我需要监禁 HTML,我会使用具有严格 CSP 规则集的 Caja。

你也可以这样做:

对于嵌入在邮件中的每个 html 页面,您将 img 下载到服务器上以供显示,重写每个链接以指向您的缓存,删除驻留在该页面上的 javascript。虽然这可能不是一个好主意,但负载/金钱/存储/带宽明智。这非常适用于发送给您的邮件,但具有某种回拨/回拨电话元素。