В моем проекте я использовал следующий метатег (как показано на следующем скриншоте):
<meta http-equiv="Content-Security-Policy" content="default-src http:">
Когда я загружаю страницу, в консоли появляются следующие ошибки:
Кто-нибудь раньше сталкивался с этой проблемой?
Также, кстати, имя моего файла js - sweetalert.min.js, но содержимое файла содержит неминифицированный js!
Вам необходимо обновить значение Content-Security-Policy, чтобы учесть директиву style-src
которая должна содержать 'unsafe-inline' (осторожно заключать в кавычки) для выполнения встроенных встроенных стилей.
Определенно не идеально заставлять разработчиков использовать политику unsafe-inline
для CSS. Возможно, нам стоит найти лучший способ справиться с этим.
Один из способов - не импортировать файл css внутри кода и сделать его доступным в виде отдельного файла, который можно импортировать в код разработчика. что-то вроде
import 'sweetalert/sweetalert.css
Таким образом, разработчик будет обязан убедиться, что он не нарушает CSP.
Он (почти) не имеет ничего общего с тем, где находится файл CSS (если CSS находится в том же домене). Sweetalert _injects_ встроенный CSS , который любой стоящий CSP не допустит, если нет значения nonce / hash. Этим утром это причиняет мне нескончаемую боль; Возможно, мне придется отключить его от моего проекта, что очень жаль, потому что мне это очень нравится (г).
Были ли обновления по этому поводу? У меня такая же проблема; просто интересно, как лучше всего это обойти?
Обходной путь - добавить хеши в заголовок Content-Security-Policy
.
Что-то вроде
style-src 'self' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-wTr/bct+DGhJCU0mVZOm9Z1v99oBZrIu4VCMYQJWdfI=';
Не идеально, но лучше, чем unsafe-inline
. Проблема в том, что если файлы изменятся, хэши больше не будут совпадать, и браузер их отклонит.
Идеальной ситуацией было бы извлечь CSS в собственный файл и разместить его на CDN. Таким образом мы можем занести файл в белый список.
Он (почти) не имеет ничего общего с тем, где находится файл CSS (если CSS находится в том же домене). Sweetalert _injects_ встроенный CSS , который любой стоящий CSP не допустит, если нет значения nonce / hash. Этим утром это причиняет мне нескончаемую боль; Возможно, мне придется отключить его от моего проекта, что очень жаль, потому что мне это очень нравится (г).
то же самое.
Я могу получить два встроенных хэша из sweetalert.min.js в Chrome. При добавлении в заголовок CSP Chrome больше не жалуется.
Но Firefox и Safari по-прежнему жалуются, и я не могу найти правильный хеш. Эти браузеры не дают никаких подсказок.
Firefox: Content Security Policy: The page’s settings blocked the loading of a resource at inline (“style-src”)
Safari: Refused to apply a stylesheet because its hash, its nonce, or 'unsafe-inline' does not appear in the style-src directive of the Content Security Policy.
Самый полезный комментарий
Обходной путь - добавить хеши в заголовок
Content-Security-Policy
.Что-то вроде
style-src 'self' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-wTr/bct+DGhJCU0mVZOm9Z1v99oBZrIu4VCMYQJWdfI=';
Не идеально, но лучше, чем
unsafe-inline
. Проблема в том, что если файлы изменятся, хэши больше не будут совпадать, и браузер их отклонит.Идеальной ситуацией было бы извлечь CSS в собственный файл и разместить его на CDN. Таким образом мы можем занести файл в белый список.