Ошибка без angular: "Отказано в выполнении встроенного скрипта, потому что он нарушает следующую директиву политики безопасности контента:" script-src 'self'"
Мой проект в Angular 6.2.8 шел очень хорошо. Однако эта ошибка начала появляться на консоли:
Отказался от выполнения встроенного сценария, поскольку он нарушает следующую директиву политики безопасности содержимого: "script-src 'self'". Для включения встроенного выполнения требуется ключевое слово 'unsafe-inline', хэш ('sha256-2P8mXF+NOGY5a6oJ1jDjLINrckn9RgJYdEesn+Qf4rQ=') или одноразовый номер ('nonce-...').
Кто-нибудь знает, как я могу это исправить?
3 ответа
К сожалению решение в комментариях:
РЕШЕНИЕ. Мой файл докеров обновлял шлем до версии 4.0.0, что указывает на проблему. В качестве решения я изменил файл докеров и сообщил версии шлема и эспресса. Пример: RUN cd /srv/opmet/ && npm init -y && npm install --save --no-progress express@4.17.1 Helmet@3.23.3
не идеально. Вы просто подсовываете мусор под ковер, но грабли все еще на месте, и вы рано или поздно наступите на них. И это не проблема шлема / экспресса, это просто RTFM.
Суть в том, что Helmet 3 по умолчанию отключает CSP, а Helmet 4 включает его по умолчанию для дополнительной безопасности. Итак, после перехода на шлем 4 у вас по умолчанию включен CSP.
У вас определенно есть встроенный скрипт в
index.html
:
<script>
if (global === undefined) {
var global = window;
}
</script>
вот почему у вас есть нарушение CSP в script-src.
Также у вас есть нарушение CSP в директиве font-src из-за:
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
Правильное решение:
либо отключить заголовок CSP в шлеме (будет работать в любых версиях):
app.use(helmet({
contentSecurityPolicy: false,
}));
либо разработать политику безопасности контента для большей безопасности вашего приложения.
Решение сработало для меня
app.use(helmet({
contentSecurityPolicy: false,
}));
А также CSP в моем index.html (из документов MSN)
<meta http-equiv="Content-Security-Policy"
content="default-src 'self'; img-src https://*; child-src 'none';">
У меня такая же ошибка, и я ее исправлю. Проблема была в dict. У меня есть папка проекта в папке dict (dict/name-proj/), когда я меняю "angular.json" "outputPath": "dist/projectName" на "outputPath": "dist". Это решило проблему для меня.