Одна из проблем безопасности, возникших в нашем приложении angular, размещенном в корзине S3, заключалась в том, что он пропустил заголовок Content-Security-Policy
.
Я следовал этой статье из AWS и настроил ее недостающие заголовки. Как только я начал получать заголовки, мое приложение сломалось со следующими ошибками:
Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='), or a nonce ('nonce-...') is required to enable inline execution.
Refused to load the font 'http://d2tjh1kqdse1z7.cloudfront.net/Roboto-BlackItalic.cc2fadc3928f2f223418.woff' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'font-src' was not explicitly set, so 'default-src' is used as a fallback.
Теперь я понимаю, что это относится к некоторым плохим практикам использования шрифта и css, которые я мог бы использовать в своем код и это нарушает какую-то политику безопасности. Я проверил и обнаружил, что это можно исправить, изменив определения CSP, как описано здесь и здесь .
Однако, есть несколько комментариев вместе с ответом о том, что что эти решения просто взломаны и небезопасны.
Мои дальнейшие попытки и выводы:
Я все еще могу попытаться удалить встроенные стили (даже если их слишком много , моя ошибка) но как go обойти вопрос относительно font-sr c.
Я также заметил, что я не использую какие-либо внешние шрифты (т.е. нет
шрифты обрабатываются с использованием CDN). Все шрифты, используемые в приложении
, являются либо настройками браузера по умолчанию, либо загружены из модулей узла
. Вполне возможно, что любая сторонняя библиотека может использовать ее
, так как я использую в своем приложении prime-ng и full-calender.
Я далее читал в Интернете, что inline относится не только к
встроенным стилям, но также и к встроенному javascript, например:
<button (click)="callAMethod()"/>
Now, how am I suppose to avoid this while using Angular ??
Даже если я не использую eval () где-либо в моем приложение, которое я все еще получаю
Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the
в соответствии с директивой политики безопасности контента: "script-sr c 'self'".
Может кто-нибудь помочь мне понять, что основная проблема здесь и каков рекомендуемый способ решения этой проблемы.
Спасибо