当前位置: 首页 > news >正文

在JavaScript / HTML中,Chrome报错Refused to execute inline script

客户端的浏览器chrome出现报错:Refused to execute inline script because it violates the following Content Security Policy directive: “script-src ‘self’”. Either the ‘unsafe-inline’ keyword, a hash (‘sha256-YnqnMlb3ecR4i/IOQz9KGjKWC2EPkS93mMFi3jtESOw=’), or a nonce (‘nonce-…’) is required to enable inline execution.

当浏览器提示 “Refused to execute inline script” 错误时,说明网页的 内容安全策略(Content Security Policy, CSP) 限制了内联脚本的执行。这是现代浏览器为防止跨站脚本攻击(XSS)而采取的安全措施。以下是详细解决方案:


1. 理解错误原因

错误核心信息:

Content Security Policy directive: "script-src 'self'"
  • 含义:当前CSP策略仅允许加载同源(相同协议+域名+端口)的外部脚本文件(<script src="...">),但禁止执行内联脚本(直接写在HTML中的 <script>...</script> 或事件属性如 onclick="...")。

  • 触发场景:若页面中包含以下代码会被拦截:

    <!-- 内联脚本块 -->
    <script>alert("Hello");
    </script><!-- 内联事件处理 -->
    <button onclick="handleClick()">Submit</button>
    

2. 解决方案

根据实际需求和安全要求,选择以下方法之一:

方案1:允许内联脚本(降低安全性,不推荐)

修改CSP策略,添加 unsafe-inline 关键字:

Content-Security-Policy: script-src 'self' 'unsafe-inline'
  • 优点:快速修复,无需修改代码。
  • 缺点:降低安全性,可能暴露XSS漏洞。
方案2:使用 Nonce(动态令牌)

通过为内联脚本添加唯一的 nonce 值,使CSP策略允许特定脚本执行。

  1. 服务器生成 Nonce(每次请求不同):

    # Python示例(其他语言类似)
    import os
    nonce = os.urandom(16).hex()
    
  2. 在CSP头中声明 Nonce

    Content-Security-Policy: script-src 'self' 'nonce-{随机值}'
    
  3. 在HTML脚本标签中添加 Nonce

    <script nonce="这里是服务器生成的随机值">console.log("内联脚本已通过CSP验证");
    </script>
    
方案3:使用 Hash(脚本内容哈希)

为内联脚本内容计算哈希值,并将哈希值添加到CSP策略。

  1. 计算脚本内容的SHA哈希

    # 示例:计算 "alert('Hello');" 的SHA-256哈希
    echo -n "alert('Hello');" | openssl dgst -sha256 -binary | openssl base64
    # 输出:YnqnMlb3ecR4i/IOQz9KGjKWC2EPkS93mMFi3jtESOw=
    
  2. 在CSP头中声明哈希值

    Content-Security-Policy: script-src 'self' 'sha256-YnqnMlb3ecR4i/IOQz9KGjKWC2EPkS93mMFi3jtESOw='
    
方案4:完全移除内联脚本(推荐)

将所有JavaScript代码移至外部文件,并通过 <script src="path/to/file.js"> 引用。

  • 重构前

    <script>// 内联代码
    </script>
    
  • 重构后

    <script src="/static/script.js"></script>
    

3. 根据服务器类型配置CSP

Nginx

在配置文件中添加HTTP头:

add_header Content-Security-Policy "script-src 'self' 'nonce-{动态值}'";

若使用动态生成Nonce,需配合后端语言(如PHP/Node.js)注入值。

Apache

.htaccess 或虚拟主机配置中添加:

Header set Content-Security-Policy "script-src 'self' 'sha256-...'"
Node.js(Express)
const express = require('express');
const app = express();
const crypto = require('crypto');app.use((req, res, next) => {const nonce = crypto.randomBytes(16).toString('base64');res.setHeader('Content-Security-Policy',`script-src 'self' 'nonce-${nonce}'`);res.locals.nonce = nonce; // 传递nonce到模板next();
});// 在模板引擎中注入nonce
app.get('/', (req, res) => {res.render('index', { nonce: res.locals.nonce });
});

4. 验证修复结果

  1. 打开浏览器开发者工具(F12),检查 Network 标签中的响应头是否包含更新后的CSP策略。
  2. 查看 Console 确认内联脚本错误已消失。
  3. 使用在线CSP验证工具(如 CSP Evaluator)检查策略安全性。

5. 高级CSP配置建议

若需更严格的策略,可扩展其他指令:

Content-Security-Policy: default-src 'self';script-src 'self' 'nonce-...';style-src 'self' 'unsafe-inline';img-src 'self' data:;connect-src 'self' https://api.example.com;frame-src 'none';object-src 'none';
  • default-src 'self': 默认所有资源仅允许同源。
  • style-src 'unsafe-inline': 允许内联CSS(常见于框架)。
  • frame-src 'none': 禁止嵌入iframe。

总结

方案安全性实现难度适用场景
允许unsafe-inline简单临时测试或遗留系统
使用Nonce中等动态生成页面的Web应用
使用Hash中等静态内联脚本
移除内联脚本最高较高新项目或重构代码

推荐优先级:移除内联脚本 > 使用Nonce > 使用Hash > 允许unsafe-inline

http://www.dtcms.com/a/464827.html

相关文章:

  • 自动驾驶的“虚拟驾校”如何炼成?
  • 自动驾驶传感器数据录制过程中的五大系统性挑战
  • 学校网站建设开题报告书wordpress 发布说说
  • 企业如何减少由于数据不一致带来的运营成本?
  • 安卓开发APP应用程序和苹果iOS开发APP应用程序有什么区别?
  • Mac 上用 Homebrew 安装 JDK 8(适配 zsh 终端)完整教程
  • 利用小偷程序做网站企业网站开发建设
  • K8S基本命令操作
  • 【kubernetes/k8s源码分析】kube-controller-manager之node controller源码分析
  • SMOTE 算法详解:解决不平衡数据问题的有效工具
  • HGDB集群(安全版)repmgr手动切换主备库
  • 三维GIS数据转换指南:SHAPE文件到3DTiles的高效实现方案
  • K8S(三)—— 基于kubeadm 1.20版本部署Kubernetes集群与Harbor私有仓库实战
  • 宁波外贸网站制作公司手机网站建设哪家公司好
  • 【C语言实战(8)】C语言循环结构(do-while):解锁编程新境界
  • 面向Qt/C++开发工程师的Ai提示词(附Trae示例)
  • sqlite 使用: 01-源码编译与使用
  • Django视图进阶:快捷函数、装饰器与请求响应
  • 企业营销网站的建设网站开发响应式
  • 掌握DMA基于GD32F407VE的天空星的配置
  • 基于腾讯云的物联网导盲助手设计与实现(论文+源码)
  • Vue3打造高效前端埋点系统
  • 框架--Maven
  • 【Java集合】
  • 停止Conda开机自动运行方法
  • 湘潭市高新建设局施工报建网站wordpress 宕机
  • 复杂结构数据挖掘(二)关联规则挖掘 Association rule mining
  • Windows 上安装 PostgreSQL
  • 基于JETSON/x86+FPGA+AI的5G远程驾驶座舱时延验证方案
  • 支持向量机(SVM)完全解读