Улучшить эту документацию Просмотреть исходный код ngCsp
- директива в модуле ng
В Angular есть некоторые возможности, которые могут нарушать определённые правила CSP (Content Security Policy).
Если вы собираетесь реализовать эти правила, то должны указать Angular, чтобы он не использовал эти возможности.
Это необходимо при разработке таких вещей, как расширения Google Chrome или универсальные приложения Windows.
Следующие правила затрагивают Angular:
-
unsafe-eval: это правило запрещает приложениям использоватьevalилиFunction(string)сгенерированные функции (среди прочего). Angular использует это в службе$parseдля повышения скорости оценки выражений Angular на 30%. -
unsafe-inline: это правило запрещает приложениям встраивать пользовательские стили в документ. Angular использует это для включения некоторых правил CSS (например,ngCloakиngHide). Чтобы эти директивы работали, когда правило CSP блокирует встроенные стили, необходимо вручную ссылаться наangular-csp.cssв вашем HTML.
Если вы не предоставите ngCsp, Angular попытается автоматически определить, блокирует ли CSP unsafe-eval, и автоматически отключит эту функцию в службе $parse. Однако эта автоматическая проверка вызывает запись ошибки CSP в консоли:
Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "default-src 'self'". Note that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
Эта ошибка не опасна, но раздражающая. Чтобы предотвратить её вывод, поместите директиву ngCsp на элемент HTML-документа, который появляется до тега <script> , загружающего файл angular.js.
Примечание: эта директива доступна только в форме атрибутов ng-csp и data-ng-csp.
Вы можете указать, какие функции Angular, связанные с CSP, следует отключить, задав значение для атрибута ng-csp. Доступны следующие варианты:
-
no-inline-style: это останавливает Angular от вставки CSS-стилей в DOM
-
no-unsafe-eval: это останавливает Angular от оптимизации $parse с помощью unsafe eval строк
Эти значения можно использовать в следующих комбинациях:
-
Отсутствие объявления означает, что Angular предположит, что вы можете использовать встроенные стили, но выполнит проверку unsafe-eval во время выполнения. Например,
<body>. Это обратно совместимо с предыдущими версиями Angular. -
Простой атрибут
ng-csp(илиdata-ng-csp) сообщит Angular о необходимости отключения как встроенных стилей, так и unsafe eval. Например,<body ng-csp>. Это обратно совместимо с предыдущими версиями Angular. -
Указание только
no-unsafe-evalсообщит Angular о запрете использования eval, но позволит вставлять встроенные стили. Например,<body ng-csp="no-unsafe-eval">. -
Указание только
no-inline-styleсообщит Angular о запрете вставки стилей, но позволит использовать eval – автоматическая проверка unsafe eval не будет выполнена. Например,<body ng-csp="no-inline-style">. -
Указание и
no-unsafe-evalиno-inline-styleсообщит Angular о запрете вставки стилей и использования eval, что эквивалентно пустому: ng-csp. Например,<body ng-csp="no-inline-style;no-unsafe-eval">
Сводка директивы
- Эта директива выполняется на приоритетном уровне 0.
Использование
- в качестве атрибута:
<html> ... </html>
В этом примере показано, как применить директиву ngCsp к тегу html.
<!doctype html> <html ng-app ng-csp> ... ... </html>
// Примечание: суффикс .csp в имени примера включает режим csp в нашем http-сервере!
© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.4.14/docs/api/ng/directive/ngCsp