内容安全策略(CSP)旨在通过为开发人员提供对允许加载页面的资源以及允许执行的脚本的细粒度控制来降低跨站点脚本攻击的风险。
启用 HTTPOnly 和 CSP 时使用 XSS 窃取 Cookie:解决方法和策略
当 HTTPOnly 开启且定义了 CSP 规则时,如何窃取 cookie?假设攻击者获得了一个执行 HTTP 的输入字段,并且该输入字段容易受到 XSS 攻击: 当 HTTPOnly 开启且定义了 CSP 规则时,如何窃取 cookie?假设攻击者获得了一个执行 HTTP 的输入字段,并且该输入字段容易受到 XSS 攻击: <form action="/createThread?topic={{lcTopic}}" method="post" class=""> <h2 class="text-muted">New Thread</h2> <hr> <div class="form-group"> <label>Body</label> <textarea type="text" rows="10" class="form-control" name="body" placeholder="Type the body of your thread here..."></textarea> </div> <button type="submit" class="btn btn-primary">Create Thread</button> <button type="button" id="threadPreview" class="btn btn-default">Preview</button> </form>` 在我的服务器中,我将 CSP 规则定义为: .use( helmet.contentSecurityPolicy({ directives: { defaultSrc: ["'self'"], scriptSrc: [ "'self'", "cdnjs.cloudflare.com" ], }, }) ) 攻击者可能通过将以下代码注入文本字段来绕过 CSP: <!DOCTYPE html> <html> <head> <title>XSS Demo</title> <SCRIPT src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></SCRIPT> <SCRIPT src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js"></SCRIPT> </head> <body ng-app ng-csp> <div> <button ng-click="$on.curry.call().alert('xss')">Click Me! </button> <div style="display:none;"> {{$on.curry.call().alert('xss')}} </div> </div> </body> </html> 现在,由于启用了 HTTPOnly,攻击者无法简单地执行“alert(document.cookie)”。考虑到 CSP 规则,他们还可以采用哪些其他方法来窃取 cookie? 我尝试了一个简单的警报(document.cookie),但由于 HTTPOnly 而不起作用: HTTP/1.1 200 OK X-Powered-By: Express Content-Security-Policy: default-src 'self';script-src 'self' cdnjs.cloudflare.com;base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests Content-Type: text/html; charset=utf-8 Content-Length: 5924 ETag: W/"1724-zhGBtITbjmwCa+un6GYhGKL+lwo" Set-Cookie: connect.sid=THE COOKIE; Path=/; HttpOnly Date: Sat, 27 Apr 2024 09:29:04 GMT Connection: close 我什至尝试这样做: {{$on.curry.call().eval("var url = '/'; fetch(url).then(response => console.log(response.headers.get('Set-Cookie')))")}} 但是自从 CSP 我得到: angular.js:5930 EvalError:拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本源:“script-src 注意:攻击者显然不允许更改服务器代码!他只能访问输入字段! 在这种情况下,攻击者无法从cookie中获取价值。 因为,HttpOnly 已激活。 这个活动是对的。 如果你成功执行JavaScriptalert(),你应该降级Web浏览器并重新攻击。
我正在尝试更好地了解内容安全策略。我的理解是,它们是向浏览器发出的指令,指示允许从何处加载页面的某些部分 - 图像,...
Heroku 附加 Edge CDN 覆盖 Content-Security-Policy 标头
我目前通过 Heroku 提供我的 Shopify 应用程序。 由于 Shopify 应用程序是在商家后台的 iframe 中加载的,因此要求之一是正确设置 Content-Security-Policy 标题...
Stripe js 脚本违反了所有 unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval' 和 'self' 指令怎么可能?
您好,我正在尝试将条纹支付集成到我的 ASP.NET 8 页项目中,尽管我允许不安全的指令,但我还是收到了此错误,缺少这些指令可能是问题的原因,但仍然...
拒绝从“blob:https://x/6a...293”创建工作线程,因为它违反了以下内容安全策略指令
我有 Blazor Web 程序集应用程序(客户端 + 服务器)并保持拒绝创建工作线程,因为它违反了以下 CSP 指令。 它可以在本地运行,但是当我尝试发布我的应用程序时......
为什么web.config中的Content-Security-Policy设置没有效果?
在一个小型 ASP.NET MVC 测试应用程序中,我将适当的 httpProtocol 代码添加到 web.config 文件中,如本文所述: 在一个小型 ASP.NET MVC 测试应用程序中,我将适当的 httpProtocol 代码添加到 web.config 文件中,如本文中所述: <system.webServer> <handlers> <remove name="BlockViewHandler"/> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> </handlers> <httpProtocol> <customHeaders> <add name="Content-Security-Policy" value="default-src 'self'" /> </customHeaders> </httpProtocol> </system.webServer> 但是,在应用程序的测试页面上,Vue.js 代码仍然有效,因为它是从 CDN 加载的,所以内容安全策略应该阻止它。 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home Page2 - Meine ASP.NET-Anwendung</title> <link href="/Content/bootstrap.css" rel="stylesheet"/> <link href="/Content/site.css" rel="stylesheet"/> <script src="/Scripts/modernizr-2.6.2.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.4/vue.js"></script> </head> <body> <div class="container mainMenu"> <ul> <li><a href="/">Start Page</a></li> <li><a href="/Home/About">About</a></li> <li><a href="/Home/Contact">Contact</a></li> <li><a href="/Home/Info">Info</a></li> </ul> </div> <div class="container body-content"> <hr/> <div id="app"> this is a test: <b>{{message}}</b> </div> <script> var app = new Vue({ el: '#app', data: { message: 'Vue.js ready' } }); </script> <hr/> <footer> <p>The footer</p> </footer> </div> <script src="/Scripts/jquery-1.10.2.js"></script> <script src="/Scripts/bootstrap.js"></script> <script src="/Scripts/respond.js"></script> </body> </html> 我需要做什么才能使内容安全策略在我的网站中真正生效? 附录 我可以在我的开发工具中看到,内容安全策略没有在响应标头中发送: 看到您问题中下面的配置块,让我假设您已将 <httpProtocol><customHeaders> ... 部分添加到 web.config 文件夹中的 Views 文件,而不是网站根目录中的 web.config 文件。 <system.webServer> <handlers> <remove name="BlockViewHandler"/> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> </handlers> </system.webServer>
Dojo 解析器:当不允许使用 unsafe-eval 的 CSP 时,new Function() 会抛出错误
我们使用 Dojo v1.17.3 和内容安全策略(不允许使用 unsafe-eval。 当定义 onclick 时,下面的行会给出解析器错误。 如果没有 onclick,上面的行工作正常。 错误详情 : 电子...
我们已经使用Java过滤器类实现了在Angular中添加CSP标头的代码。在角度方面,我们也实现了shared_styles_hosts.ts。现在,我们可以看到 CSP 标头,但是
在 Firefox 中我收到以下错误: 内容安全策略:页面的设置阻止加载数据处的资源:(“media-src”)。 我不确定为什么我在主持时会收到此错误...
作为 FLP 中启用“异步模块加载”准备工作的一部分,其先决条件之一是确保不会因 HTML 文档被加载而触发 eval 调用...
实现 jekyll-content-security-policy-generator —— 不生成 CSP
我正在尝试使用 jekyll-content-security-policy-generator gem 将 CSP 元标记添加到 Jekyll 站点,但它似乎不起作用。按照说明,我添加了 jekyll-content-
我正在尝试在新网站上实施内容安全政策。我可以看到 Chrome 的网络选项卡中设置了以下 HTTP 标头。 内容安全策略:默认 src 'self' https: 怎么...
使用 Firebase 时从内容安全策略中删除“unsafe-inline”作为“script-src”
我想从我的网络应用程序的内容安全策略中删除“script-src”中的“unsafe-inline”,并提高其安全性。但不幸的是,Firebase 似乎需要它才能
我正在使用 Helmet 并收到以下 console.log 消息之一: :3000/:48 拒绝执行内联脚本,因为它违反了 以下内容安全策略指令:“script-src ......
我目前正在为使用 Next.js 制作的生产应用程序制定内容安全策略 (CSP)。虽然我找到了使用该框架实施 CSP 的可靠文档,但有...
我的 Chrome 扩展内容脚本之一正在对这样的元素执行单击功能 varcurrencySelectorLink = document.getElementById('switcher-info'); 货币选择器链接.click();
我的申请有一点问题。我想配置一个 CSP 标头来应对所有 XSS 潜在漏洞。但我有这个错误: 未捕获的 EvalError:对 eval() 的调用被 CSP 阻止...
我正在开发的 Google Chrome 扩展程序不断抛出 CSP 错误
我正在创建一个仅供个人使用的 Chrome 扩展程序。我需要它来监视对 https://www.instagram.com/api/graphql 发出的任何请求并记录响应(即将其转发给另一个
我已将 CSP 添加到我的 Nextjs (v14.0.4) 项目中。当我在开发模式下运行项目时,我可以看到随机数被添加。但是,当我构建并启动项目时,随机数不会添加到...
我的 ReactJS 应用程序的公共 index.html 中有以下内容: 我的 ReactJS 应用程序的公共 index.html 中有以下内容: <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' 'unsafe-eval' localhost blob base64 https://js.stripe.com https://apis.google.com https://www.googletagmanager.com" /> <meta http-equiv="Content-Security-Policy" content="style-src 'unsafe-inline' 'self'" /> <meta http-equiv="Content-Security-Policy" content="default-src 'unsafe-inline' 'self'" /> 在 Safari 中,我仍然收到以下控制台错误: Refused to execute a script because its hash, its nonce, or 'unsafe-inline' does not appear in the script-src directive of the Content Security Policy. Refused to load blob:https://m.stripe.network/XXX because it does not appear in the script-src directive of the Content Security Policy. Refused to load https://js.stripe.com/v3 because it appears in neither the script-src directive nor the default-src directive of the Content Security Policy. Refused to load https://apis.google.com/js/api.js because it appears in neither the script-src directive nor the default-src directive of the Content Security Policy. 这些是否有任何理由违反 CSP? 您已将 CSP 拆分为 3 个不同的策略,并且所有内容都需要通过所有策略。在您的情况下,您加载的脚本还必须传递default-src,它只允许“self”和“unsafe-inline”。将您的 CSP 重写为“default-src ...; script-src ...; style-src ...;”这应该修复从其他主机加载的脚本。 Blob 是一个方案,需要重写为 blob: 并带有尾随冒号。 base64 可以删除。