如何避免使用 iframe 的自定义网络邮件在 https 上出现安全警告?

How to avoid security warnings on https for custom webmail using iframe?

我正在编写一个基本的网络邮件客户端。该服务器是围绕一个基本的 node.js http 服务器构建的。使用 Let's Encrypt 的有效证书通过 https 提供页面。消息正文通过 .srcdoc 属性加载到沙盒 iframe 中。

我认为将邮件加载到沙盒 iframe 中会减轻有关混合内容和跨域内容的安全警告。不幸的是,当内容加载到 iframe 时,绿色锁仍然消失,取而代之的是安全警告。

详情:后端使用node.js imap-simple模块从imap服务器获取邮件内容,returns邮件数据作为json对象解析下来到包含 from/to/cc/bcc/date/subject/text/html 个条目的信封对象数组。文本邮件不是问题,但是html邮件需要显示为html(当然除非用户选择no-html)。

我如何才能安全地显示 html 消息内容并避免因包含的消息内容不是来自我的站点而出现安全警告?

除此之外,它似乎与沙盒 iframe 配合得很好。来自其他站点消息内容的 cookie 似乎与来自我站点的 cookie 很好地隔离到它们自己的域中。它似乎很好地将站外数据与我自己的站点数据分开,脚本被禁用等来自沙箱中的 运行ning。如果启用测试,来自沙箱内部的脚本 运行 确实无法访问沙箱外部的对象。

我认为出现警告是因为沙箱内的页面是从我网站的包含页面生成的,尽管内容引用在 url 之外。显然沙盒页面不能从外部站点引用,因为它是一封电子邮件。

如何解决此问题以避免出现安全警告?其他网络邮件客户端是如何做到的?真正的问题是它让那些没有阅读实际警告或不理解其含义的人(即大多数普通用户)看起来我的网站不安全。

我的印象是将消息包含在沙箱中会阻止警告出现在包含页面上。

一些伪代码来举例说明页面的基本结构:

<html>
  <iframe id=mainpage>
    #docuement
      <iframe sandbox id=envelope0>
        #document
          <div>  ...email body with off-site content here  </div>
      </iframe>
  </iframe>
  <script>  //foo to get/generate html from the message(s)  </script>
</html>

这是一个功能,不是错误。

跨域框架不会显示为安全。

How can I safely display the html message content and avoid security warnings due to included message content that is not from my site?

您可以从您的网站而不是其他网站提供它。这将修复 SSL 警告,但不会产生任何结果 "safe"。如果内容是危险的,它仍然是危险的。