Невозможно отобразить приложение angular с заголовком Content-Security-Policy, предоставленным с сервера. - PullRequest
0 голосов
/ 28 января 2020

Одна из проблем безопасности, возникших в нашем приложении 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'".

Может кто-нибудь помочь мне понять, что основная проблема здесь и каков рекомендуемый способ решения этой проблемы.

Спасибо

...