Я провожу некоторое время с CSP, чтобы сделать приложение Angular 5 максимально безопасным, но изо всех сил пытаюсь заставить его работать.
Я включил CSP
, используя NWebSec
, следующим образом:
app.UseCsp(options =>
{
options.DefaultSources(s => s.Self());
options.ScriptSources(s => s.Self());
options.StyleSources(s => s.Self().CustomSources("stackpath.bootstrapcdn.com"));
}); // Use Content Security Policy
Я построил угловое приложение, используя:
ng build --aot --prod
В базовом приложении ASP.Net
размещается (встроенное) приложение Angular с использованием промежуточного программного обеспечения app.UseStaticFiles()
.
Я прочитал несколько статей и попытался найти прямой ответ о том, как заставить это работать, но я не могу пропустить эту ошибку, которая исходит из /main.ae5fbeccd9ff1305a55c.js:
Отказался от применения встроенного стиля, поскольку он нарушает следующую директиву политики безопасности содержимого: "style-src 'self' stackpath.bootstrapcdn.com". Либо ключевое слово unsafe-inline, хеш ('sha256-47DEQpj8HBSa + / TImW + 5JCeuQeRkm5NMpJWZG3hSuFU ='), либо одноразовый номер ('nonce -...') требуется для включения встроенного выполнения.
Я считаю, что Angular создает код, который вызывает эти ошибки, и решение заключается в использовании команды "--aot" при сборке приложения, но это не работает для меня.
Я пробовал это с Angular 5 и Angular 6 (даже пытался использовать новый проект Angular). Та же проблема.
Мой вопрос:
Есть ли в настоящее время рекомендуемый способ заставить Angular 5/6 работать с CSP без ущерба для безопасности? и если нет, то что будет дальше?
Приветствия
Дополнительные детали:
Index.html (приложение по умолчанию для сборки Angular 6)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Default Angular App</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="stylesheet" href="styles.34c57ab7888ec1573f9c.css">
</head>
<body>
<app-root></app-root>
<script type="text/javascript" src="runtime.6afe30102d8fe7337431.js"></script>
<script type="text/javascript" src="polyfills.2903ad11212d7d797800.js"></script>
<script type="text/javascript" src="main.ae5fbeccd9ff1305a55c.js"></script>
</body>
</html>