我正在花时间研究CSP,以使我的Angular 5应用程序尽可能安全,但是我很难让它正常工作。
我已经使用NWebSec启用了CSP,如下所示:
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
我使用以下内容构建了Angular应用程序:
ng build --aot --prod
ASP.Net Core应用程序使用“app.UseStaticFiles()”中间件来托管构建的Angular应用程序。
我阅读了一些文章并尝试找到如何使其工作的直接答案,但是我无法解决这个错误,它源自/main.ae5fbeccd9ff1305a55c.js:
拒绝应用内联样式,因为它违反以下内容安全策略指令:“style-src 'self' stackpath.bootstrapcdn.com”。要启用内联执行,需要“unsafe-inline”关键字、哈希('sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=')或nonce('nonce-...')。
我相信Angular正在创建导致这些错误的代码,并且解决方案是在构建应用程序时使用“--aot”命令,但对我没有起作用。
我已经尝试过Angular 5和Angular 6(甚至尝试使用新的Angular项目)。同样的问题。
我的问题是: 目前是否有推荐的方法可以使用CSP使Angular 5/6正常工作,而不会牺牲安全性?如果没有,下一个最好的选择是什么?
附加细节: 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>
wwwroot
提供index.html
?如果是的话,你确定index.html
中没有内联CSS吗? - Ritwick Deyunsafe-inline
。https://github.com/angular/angular-cli/issues/6872 - Ritwick Deyunsafe-inline
。 - Liam Fleming