iframe загружает полностью независимый документ, и если ему разрешено загружать, то он не подчиняется CSP этой страницы верхнего уровня.
Таким образом, у вас есть страница верхнего уровня, которая реализует CSP.Затем он загружает другую страницу в iframe.Эта страница может быть загружена как iframe для страницы верхнего уровня, поскольку CSP верхнего уровня позволяет загружать этот домен.
Затем страница iframed загружается полностью отдельно.Он не имеет CSP, поэтому он может загрузить все, в том числе аналитику, которая является ссылкой на эту страницу.
Вы можете получить то, что хотите, с помощью атрибута песочницы iframe. - однако он немного более ограничен: невозможно разрешить некоторые сценарии, а не другие, например.И отслеживание может быть выполнено с изображениями.
Другим вариантом будет прокси стороннего контента через ваш сервер, и вы вставляете CSP в эту страницу iframed, а затем загружаете страницу верхнего уровня на эту измененную страницу.Например:
<iframe src="https://example.com?pagetoload=streamable.com/s/aqg9y/uknjqm" frameborder="0" width="100%" height="100%" allowfullscreen></iframe>
Это также будет проще с CSP, применяемым через заголовок HTTP, а не с метатегом, поэтому вам даже не нужно изменять HTML-код, возвращаемый страницей с потоком.
Обратите внимание, что наличие полностью открытого прокси-сервера, где может быть загружена любая страница, может привести к множеству других проблем безопасности, включая, но не ограничиваясь:
- Эта страница теперь существует в этом домене,Что касается этого браузера, то он имеет доступ к файлам cookie этого домена.
- Я могу отобразить https://example.com? pagetoload = evil.example.com и избежать любой безопасности браузера, которая могла бы иначеblock evil.example.com.
и множество других подобных проблем ...