当前位置: 首页 > 知识库问答 >
问题:

造成内容安全策略(CSP)违规错误

左博学
2023-03-14

我试图在测试站点上使用新的内容安全策略(CSP)HTTP头。当我将CSP与Modernizer结合使用时,会出现CSP冲突错误。这是我正在使用的CSP策略:

内容安全策略:默认src“self”;脚本src'self'ajax.googleapis.com ajax.aspnetcdn.com;样式src‘self’;img src“自我”;字体src“self”;报表uri/WebResource.axd?cspReport=true

这些是来自Chrome浏览器控制台的错误:

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-...'), or a nonce ('nonce-...') is required to enable inline execution.

window.Modernizr.injectElementWithStyles   - modernizr-2.7.2.js:134
window.Modernizr.tests.touch               - modernizr-2.7.2.js:457(anonymous function)
modernizr-2.7.2.js:949(anonymous function) - modernizr-2.7.2.js:1406

我在Github Modernizer站点上发现了以下解决方法。然而,这个变通方法是在三月份首次提出的,在谷歌上做一点小动作,我找不到解决这个问题的方法。

我知道我可以包含不安全的内联指令,该指令可以绕过此错误,但这也使不安全代码能够运行,并首先否定CSP的使用。有人有什么解决办法吗?

更新-什么是CSP

CSP是所有主要浏览器(包括Edge)都支持的HTTP标头。本质上,它是浏览器被允许用来呈现页面的内容的白名单。在这里了解更多信息,或者在这里和这里阅读Mozilla的CSP留档。

更新-帮助突出显示CSP

CSP现在可以在所有浏览器上使用(Edge增加了支持,耶!),这是web安全的一个巨大飞跃。对于那些有兴趣获得CSP更多第三方支持的人,请参见以下内容:

  1. 对CSP的现代化支持
  2. VisualStudio对CSP的支持。请注意,如果启用了CSP,则浏览器链接不起作用,因为它使用内联JavaScript。
  3. 对CSP的Visual Studio Web Essentials扩展支持。WebEssentials是一个VisualStudio加载项,其功能通常在下一版本的VisualStudio中结束

共有2个答案

孔俊捷
2023-03-14

我找到了一个无需使用unsece-inline的修复方法。

您可以在一行中修改未最小化的Modernizer:

fakeBody = body || document.createElement('body');

皈依

fakeBody = document.createElement('body');

适用于IE9、Firefox和Chrome。

濮阳繁
2023-03-14

我怀疑除了重写Modernizer中使用内联代码或动态计算代码(适用于JS和CSS)的部分之外,没有其他解决方案。AngularJS ngCsp的经验在这里可能很有用。

 类似资料:
  • CSP(内容安全策略) CSP(Content Security Policy) 即内容安全策略,主要目标是减少、并有效报告 XSS 攻击,其实质就是让开发者定制一份白名单,告诉浏览器允许加载、执行的外部资源。即使攻击者能够发现可从中注入脚本的漏洞,由于脚本不在白名单之列,浏览器也不会执行该脚本,从而达到了降低客户端遭受 XSS 攻击风险和影响的目的。 默认配置下,CSP 甚至不允许执行内联代码

  • 为了缓解大量潜在的跨站点脚本问题,Chrome 浏览器的扩展程序整合了内容安全策略(CSP)的一般概念。这引入了一些相当严格的策略,这些策略将使扩展默认情况下更加安全,并为您提供创建和执行规则的能力,以管理扩展和应用程序可以加载和执行的内容类型。 通常,CSP 充当扩展程序加载或执行资源的阻止/允许列表机制。为扩展程序定义合理的策略使您可以仔细考虑扩展程序所需的资源,并要求浏览器确保这些是扩展程序

  • 我想使用javascript访问一个网站。但我在控制台中遇到以下错误。 拒绝连接到'https://example.com'因为它违反了以下内容安全策略指令:“default src'self'”。请注意,未显式设置“connect src”,因此使用“default src”作为回退。 我在index.html中添加了以下meta标记, 元超文本传输协议-Equiv="内容-安全-策略"内容="

  • 我正在从chargebee.com加载外部脚本,并在控制台中收到此错误消息: [仅报告]拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script src'nonce VVZ V0c=''self'https://maps.googleapis.com https://domain.chargebeestatic.com http://dgkxwewtzsnml.cloudfront.ne

  • 开发人员控制台中出现了一系列错误: 拒绝计算字符串 拒绝执行内联脚本,因为它违反了以下内容安全策略指令 拒绝加载脚本 拒绝加载样式表 这是怎么回事?内容安全策略(CSP)是如何工作的?如何使用HTTP头? 具体来说,如何。。。 …允许多个源? …使用不同的指令? …使用多个指令? …处理端口? …处理不同的协议? …允许协议? …使用内联样式、脚本和标记

  • 当我将图像上传到我的web应用程序中时,它显示以下错误 拒绝加载图像'