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

前端安全的 Content Security Policy (CSP):从理论到实战

前端安全的 Content Security Policy (CSP)从理论到实战为什么 CSP 如此重要在当今前端开发中安全问题已经成为不可忽视的重要因素。XSS跨站脚本攻击、CSRF跨站请求伪造等安全威胁时刻威胁着用户的安全和数据的完整性。Content Security Policy (CSP) 作为一种安全机制为网站提供了额外的保护层能够有效防止这些攻击。CSP 的核心优势防止 XSS 攻击限制脚本的执行来源防止恶意脚本注入减少 CSRF 风险限制表单提交和资源加载的来源提高网站安全性为网站提供额外的安全层增强用户信任保护用户数据和隐私符合安全标准满足现代 Web 安全要求CSP 基础1. 什么是 CSPContent Security Policy (CSP)是一种安全机制通过 HTTP 头或 meta 标签告诉浏览器哪些资源可以被加载和执行从而减少 XSS 等攻击的风险。基本原理浏览器根据 CSP 规则检查资源的来源只有符合规则的资源才会被加载和执行不符合规则的资源会被阻止并在控制台显示错误2. CSP 指令常用 CSP 指令指令描述示例default-src默认资源来源default-src selfscript-src脚本来源script-src self https://trusted.comstyle-src样式来源style-src self unsafe-inlineimg-src图片来源img-src self data:font-src字体来源font-src self https://fonts.googleapis.comconnect-srcAJAX 请求来源connect-src self https://api.example.comframe-src框架来源frame-src noneobject-src插件来源object-src noneform-action表单提交目标form-action selfbase-uribase 标签来源base-uri selfreport-uri违规报告地址report-uri /csp-report3. 实现方式通过 HTTP 头设置# Nginx 配置 add_header Content-Security-Policy default-src self; script-src self https://trusted.com; style-src self unsafe-inline;; # Apache 配置 Header set Content-Security-Policy default-src self; script-src self https://trusted.com; style-src self unsafe-inline; # Express.js 配置 app.use((req, res, next) { res.setHeader(Content-Security-Policy, default-src self; script-src self https://trusted.com; style-src self unsafe-inline;); next(); });通过 meta 标签设置meta http-equivContent-Security-Policy contentdefault-src self; script-src self https://trusted.com; style-src self unsafe-inline;CSP 高级配置1. 指令值常用指令值self允许来自同源的资源unsafe-inline允许内联脚本和样式unsafe-eval允许使用 eval() 等危险函数none不允许任何资源https:允许来自 HTTPS 协议的资源data:允许 data URI具体域名允许来自指定域名的资源示例# 允许来自同源的所有资源以及来自 trusted.com 的脚本 Content-Security-Policy: default-src self; script-src self https://trusted.com # 允许来自同源的脚本和样式以及内联样式 Content-Security-Policy: script-src self; style-src self unsafe-inline # 禁止所有插件 Content-Security-Policy: object-src none2. 报告模式报告模式允许 CSP 规则被监控但不强制执行适合在部署前测试# 报告模式 Content-Security-Policy-Report-Only: default-src self; script-src self https://trusted.com; report-uri /csp-report收集报告// Express.js 示例 app.post(/csp-report, (req, res) { console.log(CSP 违规报告:, req.body); // 存储报告到数据库或日志 res.status(204).send(); });3. 哈希和非ce 源使用哈希# 使用脚本哈希 Content-Security-Policy: script-src self sha256-abc123... # 使用样式哈希 Content-Security-Policy: style-src self sha256-def456...使用 nonce// 生成随机 nonce const nonce crypto.randomBytes(16).toString(base64); // 设置 CSP 头 res.setHeader(Content-Security-Policy, script-src self nonce-${nonce};); // 在脚本中使用 nonce script nonce${nonce} // 内联脚本 /script最佳实践1. 从严格到宽松建议的实施步骤使用报告模式先在报告模式下测试 CSP分析报告收集和分析违规报告调整规则根据报告调整 CSP 规则强制执行切换到强制执行模式持续监控定期检查违规报告2. 常见场景配置基本配置# 基本安全配置 Content-Security-Policy: default-src self; script-src self; style-src self unsafe-inline; img-src self data:; font-src self; connect-src self; frame-src none; object-src none; form-action self;包含 Google Analytics# 包含 Google Analytics Content-Security-Policy: default-src self; script-src self https://www.google-analytics.com; img-src self data: https://www.google-analytics.com; connect-src self https://www.google-analytics.com; style-src self unsafe-inline;包含 CDN# 包含 CDN Content-Security-Policy: default-src self; script-src self https://cdn.example.com; style-src self https://cdn.example.com; img-src self https://cdn.example.com data:; font-src self https://cdn.example.com;3. 避免常见错误常见错误过度使用 unsafe-inline允许所有内联脚本和样式降低安全性过度使用 unsafe-eval允许使用 eval() 等危险函数增加安全风险使用通配符 *允许来自任何域名的资源降低安全性忽略报告不收集和分析违规报告无法及时发现问题正确做法使用哈希或 nonce替代 unsafe-inline避免使用 eval()使用其他方式实现功能明确指定域名只允许来自可信域名的资源收集和分析报告及时发现和解决问题代码优化建议反模式!-- 不好的做法使用内联脚本 -- script // 内联脚本 function handleClick() { alert(Clicked!); } /script !-- 不好的做法使用内联样式 -- div stylecolor: red;Red text/div !-- 不好的做法使用 eval() -- script const code alert(Hello);; eval(code); /script# 不好的做法过度宽松的 CSP Content-Security-Policy: default-src *; script-src * unsafe-inline unsafe-eval; # 不好的做法不使用报告模式 Content-Security-Policy: default-src self; script-src self;正确做法!-- 好的做法使用外部脚本 -- script srcscript.js/script !-- 好的做法使用外部样式 -- link relstylesheet hrefstyles.css !-- 好的做法使用 nonce -- script nonce${nonce} // 内联脚本 /script !-- 好的做法避免使用 eval() -- script // 使用函数代替 eval() function executeCode(code) { return Function(code)(); } executeCode(alert(Hello);); /script# 好的做法使用报告模式测试 Content-Security-Policy-Report-Only: default-src self; script-src self; report-uri /csp-report # 好的做法使用哈希或 nonce Content-Security-Policy: default-src self; script-src self sha256-abc123...; style-src self sha256-def456...; # 好的做法明确指定域名 Content-Security-Policy: default-src self; script-src self https://trusted.com; style-src self https://trusted.com;常见问题及解决方案1. 内联脚本被阻止问题内联脚本被 CSP 阻止。解决方案使用外部脚本使用 nonce使用哈希2. 第三方脚本被阻止问题第三方脚本如 Google Analytics被 CSP 阻止。解决方案在 script-src 中添加第三方域名使用报告模式测试3. 样式被阻止问题内联样式或外部样式被 CSP 阻止。解决方案使用外部样式在 style-src 中添加 unsafe-inline仅用于内联样式使用 nonce 或哈希4. AJAX 请求被阻止问题AJAX 请求被 CSP 阻止。解决方案在 connect-src 中添加 API 域名使用相对路径5. 报告收集问题无法收集 CSP 违规报告。解决方案配置 report-uri实现报告收集端点使用第三方服务收集报告总结Content Security Policy (CSP) 是一种强大的安全机制能够有效防止 XSS 等攻击提高网站的安全性。通过合理的 CSP 配置可以为网站提供额外的安全层保护用户数据和隐私。在实际开发中应该根据项目的具体需求选择合适的 CSP 配置并遵循最佳实践确保网站的安全性。记住CSP 不是银弹它需要与其他安全措施如输入验证、输出转义等相结合才能构建真正安全的网站。推荐阅读Content Security Policy 官方文档CSP 最佳实践CSP 指令参考XSS 防护指南

相关文章:

前端安全的 Content Security Policy (CSP):从理论到实战

前端安全的 Content Security Policy (CSP):从理论到实战 为什么 CSP 如此重要? 在当今前端开发中,安全问题已经成为不可忽视的重要因素。XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等安全威胁时…...

如何快速掌握PLIP:蛋白质-配体相互作用分析工具的完整实战指南

如何快速掌握PLIP:蛋白质-配体相互作用分析工具的完整实战指南 【免费下载链接】plip Protein-Ligand Interaction Profiler - Analyze and visualize non-covalent protein-ligand interactions in PDB files according to 📝 Schake, Bolz, et al. (20…...

大气层Atmosphere 1.7.1深度优化指南:终极性能调优与稳定配置

大气层Atmosphere 1.7.1深度优化指南:终极性能调优与稳定配置 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层Atmosphere-stable 1.7.1作为Switch系统破解的稳定版本&…...

AI代理统一管理平台Agent Deck:从终端复用器到智能驾驶舱的演进

1. 项目概述:为什么我们需要一个AI代理的“驾驶舱”? 如果你和我一样,同时开着Claude Code、Gemini CLI,可能后台还挂着个OpenCode,那你一定经历过这种混乱:十几个终端标签页在任务栏上挤成一团&#xff0…...

ComfyUI IPAdapter Plus完整指南:用单张图片控制AI图像生成

ComfyUI IPAdapter Plus完整指南:用单张图片控制AI图像生成 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 想要用一张参考图片就能让AI生成的图像拥有相同的人物特征、艺术风格或构图布局吗…...

VS-Code-Extension-Doc-ZH高级技巧:自定义编辑器与Webview开发完全指南

VS-Code-Extension-Doc-ZH高级技巧:自定义编辑器与Webview开发完全指南 【免费下载链接】VS-Code-Extension-Doc-ZH VS Code插件开发文档-中文版 项目地址: https://gitcode.com/gh_mirrors/vs/VS-Code-Extension-Doc-ZH VS-Code-Extension-Doc-ZH是VS Code插…...

MAA明日方舟助手:如何用智能自动化彻底告别重复性游戏操作?

MAA明日方舟助手:如何用智能自动化彻底告别重复性游戏操作? 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地…...

EDR规避技术解析:从API钩子绕过到直接系统调用实战

1. 项目概述与核心价值最近在安全研究领域,一个名为“EDRSilencer”的开源工具引起了我的注意。这个项目由netero1010发布在GitHub上,从名字就能直观地感受到它的目标:让EDR(端点检测与响应)系统“沉默”。对于从事渗透…...

如何打造前沿风格代码编辑器:Frontier主题完整配置指南

如何打造前沿风格代码编辑器:Frontier主题完整配置指南 【免费下载链接】colour-schemes Colour schemes for a variety of editors created by Dayle Rees. 项目地址: https://gitcode.com/gh_mirrors/co/colour-schemes GitHub 加速计划的 colour-schemes …...

Unity PSD导入器终极指南:如何快速将Photoshop文件转换为Unity游戏资源 [特殊字符]

Unity PSD导入器终极指南:如何快速将Photoshop文件转换为Unity游戏资源 🎮 【免费下载链接】UnityPsdImporter Advanced PSD importer for Unity3D 项目地址: https://gitcode.com/gh_mirrors/un/UnityPsdImporter 核心关键词:Unity P…...

Google Cloud Next 26: 定义 “智能体企业“ 新纪元

以下文章来源于谷歌云服务,作者 Google CloudThomas KurianGoogle Cloud 首席执行官本周,我们在 Next 26 大会上宣布了一系列创新技术,包括全新统一的 AI 技术栈、第八代 TPU (Tensor Processing Unit),以及在数据、安全和生产力领…...

如何使用foobox-cn的调试与故障排除工具:完整指南

如何使用foobox-cn的调试与故障排除工具:完整指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn是foobar2000的DUI配置项目,提供了强大的音乐播放界面定制功能。当…...

如何将酷我音乐KWM格式转换为MP3?详细步骤与工具推荐

为什么酷我KWM格式需要转换 你是否遇到过这样的情况:在酷我音乐下载了喜欢的歌曲,却发现文件格式是KWM,既不能在其他音乐播放器打开,也无法传输到手机或U盘中播放?这是因为KWM是酷我音乐的加密格式,仅支持…...

如何将酷狗KGM格式转换为MP3?kgg转换mp3,kgma转换mp3,详细步骤与工具推荐

如何将酷狗KGM格式转换为MP3?详细步骤与工具推荐 酷狗KGM格式转MP3真的可行吗 你是否也曾遇到过这样的困扰:在酷狗音乐下载了喜欢的歌曲,却发现文件格式是陌生的KGM,无法在其他播放器中打开?别急,今天就为…...

mgg格式转换mp3教程,mgg如何转换成mp3格式,mggl转换mp3

【必看】QQ音乐需卸载新版,安装旧版客户端才支持解锁转换,下载地址: https://q394324546.lanzouo.com/ig7Ml1lwep9i 工具地址: https://www.kdocs.cn/l/cuR1SBCJtJB1 你是不是也遇到过这样的情况:在 QQ 音乐下载了喜…...

AI Agent在智能营销中的应用:多智能体协同投放与优化案例

从烧钱盲投到精准触达:AI多智能体协同如何重构智能营销投放全链路 关键词 AI Agent、多智能体协同、智能营销、广告投放优化、强化学习、动态出价、用户画像建模 摘要 本文针对当前智能营销领域普遍存在的预算浪费高、跨渠道协同难、动态环境响应慢、多目标对齐难等核心痛…...

SQLGlot:统一多数据库SQL解析与转换的终极解决方案

SQLGlot:统一多数据库SQL解析与转换的终极解决方案 【免费下载链接】sqlglot Python SQL Parser and Transpiler 项目地址: https://gitcode.com/gh_mirrors/sq/sqlglot SQLGlot是一个功能强大的Python SQL解析器和转换器,它能够帮助开发者轻松处…...

互联网大厂 Java 求职面试:从音视频场景到微服务架构的深度探讨

互联网大厂 Java 求职面试:从音视频场景到微服务架构的深度探讨 在互联网大厂的求职过程中,面试官与候选人之间的问答环节往往充满了技术的挑战与趣味的碰撞。本文以严肃的面试官和搞笑的水货程序员燕双非进行对话,带领大家深入了解 Java 技术…...

VS Code Dev Containers启动慢如蜗牛?5个被90%开发者忽略的内核级优化技巧,立即生效

更多请点击: https://intelliparadigm.com 第一章:Dev Containers启动性能瓶颈的底层归因分析 Dev Containers 的启动延迟并非单一因素所致,而是由容器生命周期各阶段的协同阻塞共同导致。核心瓶颈集中于镜像拉取、文件系统挂载、初始化脚本…...

【紧急预警】C++ MCP网关正在 silently 烧钱!3类GCC未启用的PCH/PGO/LTO组合策略可立即止损

更多请点击: https://intelliparadigm.com 第一章:C MCP网关成本失控的根因诊断与量化建模 C MCP(Model-Controller-Protocol)网关在高并发微服务架构中常因资源绑定粒度粗、生命周期管理缺失及协议解析路径未收敛,导…...

终极指南:如何用MAA明日方舟助手彻底解放你的游戏时间

终极指南:如何用MAA明日方舟助手彻底解放你的游戏时间 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://git…...

Qwen3.5-4B-AWQ-4bit多模态实战:截图提问+界面元素识别真实案例

Qwen3.5-4B-AWQ-4bit多模态实战:截图提问界面元素识别真实案例 1. 模型概述与核心优势 Qwen3.5-4B-AWQ-4bit是阿里云通义千问团队推出的轻量级多模态模型,在保持高性能的同时实现了极致的资源优化。这个4B参数的稠密模型经过4bit AWQ量化后&#xff0c…...

Ubuntu 安装CUDA 教程

一、 cuda下载链接 CUDA Toolkit 13.0 Downloads | NVIDIA Developer 二、 cuda安装命令 顺序执行下面的命令 1 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin 2 sudo mv cuda-ubuntu2204.pin /etc/apt/preferen…...

智能安防中的视频分析与预警处置

智能安防中的视频分析与预警处置 随着人工智能技术的快速发展,智能安防系统已成为现代城市安全管理的重要组成部分。其中,视频分析与预警处置作为核心功能,通过实时监控、智能识别和快速响应,大幅提升了安防效率。无论是公共场所…...

Voxtral-4B-TTS-2603开源可部署:Mistral官方权重+社区Web封装完整溯源

Voxtral-4B-TTS-2603开源可部署:Mistral官方权重社区Web封装完整溯源 1. 平台介绍 Voxtral-4B-TTS-2603是Mistral发布的开源权重语音合成(TTS)模型,专为语音Agent等生产场景设计。这个模型支持多语言文本转语音功能,并提供多种预设音色选择…...

常见激光雷达ROS驱动下各数据字段单位明细

常见雷达型号 velodyne、万集、速腾聚创、禾赛科技、览沃 数据字段明细 velodyne_NCLT namespace velodyne_ros { struct EIGEN_ALIGN16 Point{float x; /**< X axis, Unit:m */float y; /**< Y axis, Unit:m */float z; /**< Z ax…...

Qwen3.5-9B企业级部署教程:开机自启+日志监控+异常自动重启配置

Qwen3.5-9B企业级部署教程&#xff1a;开机自启日志监控异常自动重启配置 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;具备强大的逻辑推理、代码生成和多轮对话能力。其多模态变体Qwen3.5-9B-VL支持图文输入理解&#xff0c;并能处理长达128K tok…...

深度解析Blender glTF 2.0插件:3大核心模块架构设计与性能优化实战指南

深度解析Blender glTF 2.0插件&#xff1a;3大核心模块架构设计与性能优化实战指南 【免费下载链接】glTF-Blender-IO Blender glTF 2.0 importer and exporter 项目地址: https://gitcode.com/gh_mirrors/gl/glTF-Blender-IO Blender glTF 2.0插件是连接Blender与glTF …...

如何轻松提取游戏资源?QuickBMS工具终极指南

如何轻松提取游戏资源&#xff1f;QuickBMS工具终极指南 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS 你是否曾经想要修改游戏文件、提取游戏资源或进行游戏本地化&#xff0c;却被复杂的文件…...

告别安卓模拟器:在Windows上直接安装APK的完整指南

告别安卓模拟器&#xff1a;在Windows上直接安装APK的完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了臃肿的安卓模拟器&#xff1f;想不想在Wind…...