如何使用iframe避免https上的自定义webmail安全警告?

时间:2018-05-29 00:05:26

标签: javascript node.js iframe imap webmail

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

我认为将邮件加载到沙盒中的iframe可以缓解有关混合内容和跨域内容的安全警告。不幸的是,当内容加载到iframe时,绿色锁仍然会消失并被安全警告替换。

详细信息:后端使用node.js imap-simple模块从imap服务器检索邮件内容,并将电子邮件数据作为json对象返回,然后将其解析为包含from / to / cc的包络对象数组/ bcc / date / subject / text / html条目。文本电子邮件不是问题,但是html电子邮件需要显示为html(除非用户选择no-html)。

如何安全地显示html邮件内容并避免因包含的邮件内容而导致的安全警告?

除此之外,它似乎与沙盒iframe一起发挥作用。来自其他网站上的邮件内容的Cookie似乎很好地隔离到自己的域,就像来自我网站的Cookie一样。它似乎很好地将异地数据与我自己的网站数据分开,脚本被禁用等在沙箱中运行。如果启用了测试,则从沙箱内部运行的脚本确实无法访问沙箱外的对象。

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

如何解决此问题以避免安全警告?其他webmail客户端如何做到这一点?真正的问题是,看起来我的网站对于没有阅读实际警告的人来说是不安全的,或者不明白它意味着什么(即大多数普通用户)。

我的印象是在沙箱中包含邮件会阻止警告显示在包含页面上。

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

<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>

1 个答案:

答案 0 :(得分:2)

这不是一个错误的功能。

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

  

如何安全地显示html邮件内容并避免因包含的邮件内容而导致的安全警告?

您可以从您的网站而非其他网站提供。这将修复SSL警告,但不会做任何事情&#34;安全&#34;。如果内容很危险,那仍然是危险的。