У меня есть базовый клиент веб-почты, который я пишу. Сервер построен на основе базового http-сервера node.js. Страницы обслуживаются через https с использованием действительного сертификата от Let's Encrypt. Тело сообщения загружается в изолированный iframe с помощью атрибута .srcdoc.
Я думал, что загрузка сообщения в изолированный iframe смягчит предупреждения безопасности о смешанном и междоменном содержимом. К сожалению, когда контент загружается в iframe, зеленый замок все равно исчезает и заменяется предупреждением безопасности.
Подробности: серверная часть использует модуль imap-simple node.js для извлечения содержимого почты с сервера imap и возвращает данные электронной почты в виде объекта json, который затем анализируется в массив объектов-конвертов, содержащих from/to/cc/bcc/ дата/тема/текст/html записи. Текстовые электронные письма не являются проблемой, но электронные письма в формате html должны отображаться как html (если, конечно, пользователь не выберет не-html).
Как я могу безопасно отображать содержимое сообщения в формате html и избежать предупреждений системы безопасности из-за включенного содержимого сообщения, которое не принадлежит моему сайту?
Кроме того, он отлично работает с изолированными фреймами. Куки-файлы из содержимого сообщений на других сайтах, как и куки-файлы с моего сайта, хорошо разделены по своим собственным доменам. Кажется, что он хорошо отделяет сторонние данные от данных моих собственных сайтов, скрипты отключены и т. Д. От запуска в песочницах. Если включено для тестирования, сценарий, запускаемый из песочницы, действительно не имеет доступа к объектам за пределами песочницы.
Я думаю, что предупреждения появляются, потому что страница внутри песочницы создается из содержащей страницы моего сайта, хотя содержимое ссылается на внешний 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>