CSP基础

业务场景

希望能集成一个weda开发出来的页面到开放平台上

实现方式

1
<iframe src="https://lowcode-7gcbyr6cba0c6868-1312402421.tcloudbaseapp.com/app-v9spncjv/production/index" width="600" height="720" frameborder="0" allowfullscreen></iframe>

通过iframe实现,虽然对iframe也不算很了解,但是简单的本地测试没问题

遇到问题

push到生产环境之后,浏览器直接报无法加载,console中类似报错,例子中用的script,实际是iframe

1
Refused to load the script 'http://xxxxx' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' 'unsafe-inline'

定位问题

之前做等保认证时,好像配置过csp(Content Security Policy),当时不知道具体作用根据需要就配置了下,现在重新梳理下

CSP作用

我们都应该听说过XSS(跨站脚本攻击);它可能是最常见、危害最大的网络安全漏斗。大约十年前吧,W3C 网络应用安全工作组为防御 XSS、点击劫持等代码注入攻击,推荐 CSP 成为计算机安全标准,以阻止恶意内容在受信网页环境中执行;之后几乎所有的现代浏览器都支持了这一策略。

实现方式

配置在响应的标头里或者html网页的meta里的一串字符串,如下所示

1
Content-Security-Policy: style-src 'unsafe-inline' 'self'; script-src blob: 'unsafe-inline' 'self';

我因为要引入https://lowcode-7gcbyr6cba0c6868-1312402421.tcloudbaseapp.com/这个网页作为iframe的源头,
就应该在iframe-src或者default-src中配置这个地址

遇到一些不明确的问题

一开始偷懒不想改nginx里的配置,在meta中直接添加了https://lowcode-7gcbyr6cba0c6868-1312402421.tcloudbaseapp.com/,
但是效果跟预期不一致,不清楚响应的标头和meta里都配置出现了什么问题

最后的解决方式

nginx里的csp直接删掉,下次等保再说吧

参考的网络资源

CSP基础学习