Как проверить, безопасен ли HTML с iframes?

Я получаю из строк API-кода HTML, который может содержать встроенные видео из следующих служб:

  • youtube.com,
  • vimeo.com,
  • dailymotion.com,
  • prezi.com

Если я уверен, что это достаточно безопасно, я могу преобразовать их в надежный SafeHtml (чтобы обойти дезинфицирующее средство Angular):

this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.htmlFromApi);

А затем разместите его на странице, например так:

<div [innerHtml]="safeHtml"></div>

Вопросы:

  1. Какие проверки мне нужно выполнить, чтобы убедиться, что эта строка достаточно безопасна? (он не содержит встроенных скриптов и ведет только на один из этих четырех сайтов без хитрых перенаправлений)?

  2. Имеет ли смысл каким-то образом добавлять эти сайты в исключения из дезинфицирующего средства Angular? И как это сделать, если да?

Заранее спасибо!

PS Я видел этот похожий вопрос: как проверить, безопасна ли строка HTML? Но я надеюсь, что есть что-то более свежее и актуальное для лучших практик Angular

1 ответ

Решение

Пока не угловой конкретный ответ; Вы хотите, чтобы на вашем сайте был заголовок Политики безопасности контента, чтобы разрешить доступ к веб-сайтам Cerain только через (i) фреймы.

Пример:

Content-Security-Policy: 
         default-src 'self' https:; 
         script-src 'self' https:; 
         frame-src: https://*.youtube.com https://*.vimeo.com 
                    https://*.dailymotion.com https://*.prezi.com;

(Заголовок многострочный только для ясности чтения)

Этот CSP устанавливает некоторые правила для вашего сайта, чтобы:

  • По умолчанию разрешены только ссылки на сам сайт ("я") и только через https.
  • Сценарии могут быть только [надежно доступными] файлами, а НЕ встроенными сценариями, и эти файлы должны вызываться с одного и того же веб-сайта.
  • (i)frames С сайта можно звонить только по указанным доменным именам. Я поставил Https Типы адресов здесь, так как это лучшая практика, а также вы должны отметить, что это * запретит доступ к URL-адресам-заполнителям, таким как https://y2u.be, но вы можете добавить эти варианты, как вам нужно.

Приведенное выше объявление CSP делает именно то, что вам нужно в вашем вопросе, и поэтому обходит вашу необходимость фильтровать определенные домены после safeHtml дезинфицирующее.

Дезинфицирующее средство все еще, вероятно, нужно будет пройти - как-то - но я не знаю углового, поэтому не могу ответить на эту деталь.

Узнайте больше о frame-src CSP directve.

редактировать

Более гибкий пример, если пользователи используют не-TLS-соединения или если ваш веб-сайт не защищен TLS, также включает в себя также пример для коротких URL-адресов:

Content-Security-Policy: 
         default-src 'self'; 
         script-src 'self'; 
         frame-src: https://*.youtube.com https://*.vimeo.com 
                    https://*.dailymotion.com https://*.prezi.com
                    http://*.youtube.com http://*.vimeo.com 
                    http://*.dailymotion.com http://*.prezi.com
                    https://youtu.be;
Другие вопросы по тегам