如何解决托管在Cloudant上的Web应用“脚本执行被阻止”报错问题
问题产生原因
- IBM Cloudant 安全策略更新后,对所有通过原生HTTP接口直接返回的HTML类静态资源,默认会注入带
sandbox指令的Content-Security-Policy响应头,默认配置未包含allow-scripts权限,用于降低存储型XSS攻击风险,该策略为平台全局默认生效,无需用户主动配置。 - 仅当你直接通过
https://<你的Cloudant实例地址>/<数据库名>/<附件路径>的形式访问应用入口时会触发该限制,如果通过自定义服务转发请求则不会触发。 - 少数场景下自定义域名绑定的平台路由会自动同步该安全规则,额外追加沙箱限制。
解决方法
- 方法1:开启静态站点托管配置
进入Cloudant控制台对应数据库的「静态站点托管」配置页,勾选「允许脚本执行」选项,保存后等待3~5分钟配置生效即可,平台会自动修改响应头的sandbox字段,补充allow-scripts权限。 - 方法2:自定义设计文档响应头
编辑存储静态资源的设计文档,在headers配置块添加以下内容,覆盖平台默认的安全头:"Content-Security-Policy": "sandbox allow-scripts allow-same-origin allow-forms; default-src 'self' 'unsafe-inline' 'unsafe-eval'" - 方法3:新增代理转发层
不直接使用Cloudant原生接口对外提供Web服务,在前端新增轻量代理服务,转发请求时修改响应头的sandbox字段,补充allow-scripts权限即可解除限制。
内容的提问来源于stack exchange,提问作者jahoward11
相关产品推荐
相关产品推荐

