Как проверить, безопасен ли 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>
Вопросы:
Какие проверки мне нужно выполнить, чтобы убедиться, что эта строка достаточно безопасна? (он не содержит встроенных скриптов и ведет только на один из этих четырех сайтов без хитрых перенаправлений)?
Имеет ли смысл каким-то образом добавлять эти сайты в исключения из дезинфицирующего средства 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;