У меня есть iframe в веб-просмотре, который загружает скрипт из актива приложения Android, используя следующее: -
<script src='file:///android_asset/trusted-iframe-script.js'></script>
Теперь я хочу иметь политику безопасности контента в iframe, чтобы никакой другой скрипт не мог быть загружен. Для этого я добавил в iframe CSP:
script-src: 'file:///android_asset/trusted-iframe-script.js';
Это не работает, поскольку файл uri игнорируется хромом.
The source list for Content Security Policy directive 'script-src' contains an invalid source: 'file:///android_asset/trusted-iframe-script.js'. It will be ignored.
Refused to load the script 'file:///android_asset/trusted-iframe-script.js' because it violates the following Content Security Policy directive: "script-src file:///android_asset/trusted-iframe-script.js".
Я читал о файловой системе uri, но для этого требуется запросить доступ к пользователю, но на самом деле мне нужен только доступ к моим собственным активам, а не к файловой системе в целом. Я также читал о blob: urls, но это похоже на встраивание всего скрипта
Как правильно ограничить csp только URL-адресами файлов?
3 ответа
Короче говоря, это невозможно сделать для изолированного iframe.
Chrome CSP не позволяет добавлять URL-адреса файлов в белый список как скрипт src. Вы можете использовать файл директивы: (без какого-либо URL-адреса), и это будет работать, если iframe не был изолирован. Но это плохая идея, так как
A. мой iframe изолирован, и
Б. это недокументированное ключевое слово, которое может перестать работать в любой момент.
Я также попытался создать URL-адрес большого двоичного объекта для контента и вместо этого передать его в iframe, но это тоже не сработает, если вы не установите allow-same-origin в атрибуте песочницы iframe.
Если CSP установлен на «странице», содержащей iframe, вы должны использовать директива child-src: вместо script-src: (Источник)
Тогда я не использую, как включать файл assert, и вы можете попробовать:
Дочерний-источник: файл: ///android_asset/trusted-iframe-script.js
// я не могу это проверить
Child-src: файловая система: ///android_asset/trusted-iframe-script.js
// источник и проверьте, требуется ли по-прежнему запрашивать доступ к пользователю
child-src: https://your.trusted.website.com/trusted-iframe -script.js
// это должно работать, но для этого требуется доверенный сервер, а приложение должно подключаться к Интернету (нет очевидного условия)
В URI CSP нет кавычек - попробуйте script-src: file:///android_asset/trusted-iframe-script.js;
Если это не сработает, большинство браузеров Android теперь поддерживают CSP2, который позволяет указать хеш для поддерживаемого сценария.
Похожие вопросы
Новые вопросы
google-chrome
[google-chrome] предназначен для вопросов, связанных с разработкой с помощью Google Chrome, веб-браузера, использующего механизм рендеринга Blink. Предупреждение! Общая поддержка браузера не по теме: вопросы по использованию или настройке браузера следует размещать на https://superuser.com. Chrome OS и Chromium не по теме: вопросы о [google-chrome-os] или [chromium] должны использовать эти теги.