为 CDN 实施正确的 CSP 规则

Posted

技术标签:

【中文标题】为 CDN 实施正确的 CSP 规则【英文标题】:Implementing correct CSP rules for CDN 【发布时间】:2017-08-22 03:06:19 【问题描述】:

我目前正在我的大学学习移动 Web 应用程序开发课程,并且正在努力在我的秘银应用程序上设置引导程序。

我之前在 “正常” Web 应用程序上设置了引导程序,但我很难理解如何在我的 Mithril.js 应用程序中正确设置内容安全策略。

应该注意的是,这不是我当前任务的必需部分,但我宁愿尝试自己理解 CSP 的概念,因为理解它非常重要(OWASP top 10,哟!)。

所以我不是要求任何人帮助我完成一项任务,而是帮助我了解我在 CSP 的课外应用中哪里出了问题。


这就是我的 CSP 现在的样子:

<meta http-equiv="Content-Security-Policy" 
content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval';
         style-src 'self' 'unsafe-inline' http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css;
         media-src *; img-src 'self' data: content:;
         script-src https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js
         http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js;">

CDN 网址工作正常,目前已在我设置的多个其他网站上实施,但在 Chrome 上检查控制台时出现这些错误:

拒绝加载脚本“http://localhost:8013/cordova.js”,因为 它违反了以下内容安全政策指令: “脚本-src https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"。

index.html:1 拒绝加载脚本 'http://localhost:8013/bin/app.js' 因为它违反了以下规定 内容安全策略指令:“script-src https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"。

jquery.min.js:2 拒绝加载字体 'http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff2' 因为它违反了以下内容安全政策指令: “default-src 'self' 数据:差距:https://ssl.gstatic.com'unsafe-eval'”。 注意 'font-src' 没有显式设置,所以使用了 'default-src' 作为后备。

(匿名)@jquery.min.js:2 jquery.min.js:2 拒绝加载字体 'http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff' 因为它违反了以下内容安全政策指令: “default-src 'self' 数据:差距:https://ssl.gstatic.com'unsafe-eval'”。 注意 'font-src' 没有显式设置,所以使用了 'default-src' 作为后备。

(匿名)@jquery.min.js:2 jquery.min.js:2 拒绝加载字体 'http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf' 因为它违反了以下内容安全政策指令: “default-src 'self' 数据:差距:https://ssl.gstatic.com'unsafe-eval'”。 注意 'font-src' 没有显式设置,所以使用了 'default-src' 作为后备。

(匿名)@ jquery.min.js:2 http://localhost:8013/favicon.ico 失败 加载资源:服务器响应状态为 404(不是 找到)

【问题讨论】:

【参考方案1】:

在我们的聊天中也回答了这个问题,但对于其他人来说,这里是简短的答案。把你的url放到'unsafe-inline'前面的css文件中,所以是

style-src 'self' bootstrap.css 'unsafe-inline';

在 jquery 和 bootstrap.js 之前,您需要在 script-src 中使用“self”。

【讨论】:

这是一个可怕的想法,因为包含 'unsafe-inline' 意味着您可能根本没有 CSP

以上是关于为 CDN 实施正确的 CSP 规则的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 React SPA 中访问路由组件,同时保持正确的 CSP?

CCF-CSP 202209 赛题练习

C# Composition - 不完全确定我是不是正确实施

csp是啥考试

如何以正确的方式实施客户端证书身份验证?

远程监督:基于规则的标记方法?