CSP面试宝典实战教程:从零到上线全流程
CSP(Content-Security-Policy 内容安全策略)面试宝典实战教程|从零到上线全流程
面向 Web 安全、渗透测试、后端开发、前端安全岗面试;CSP 核心定位:浏览器端白名单安全机制,纵深防御,主要用来对抗
XSS、资源注入、点击劫持MDN Web Do... 主线:原理 → 指令语法 → 两种部署方式 → 灰度上线完整流程(Report-Only 先行)→
排坑、调优、面试高频题、故障复盘一句话核心:先报告、不拦截;收敛白名单;禁止 inline-script /eval;最后切正式防护头
一、基础认知(面试开篇必背)
1. 什么是 CSP
CSP 是 HTTP 响应头,告诉浏览器哪些源(script、img、style、font、media、frame 等)允许加载、哪些脚本可以执行;浏览器强制执行策略,违规资源会阻止加载 / 执行,并上报违规报告MDN Web Do...。
它不是 WAF,不是防火墙;是浏览器侧防护,属于客户端纵深防御,不能修复后端漏洞,但能大幅缩小 XSS 漏洞危害。
2. 两个头部(面试必考)
Content-Security-Policy-Report-Only:只上报、不拦截,灰度阶段专用,业务零损伤,收集违规日志
Content-Security-Policy:正式生效,拦截违规资源、脚本,同时上报
面试高频坑:不要直接上正式头,容易线上大面积白屏、功能失效。
3. 基础关键字源(背熟)
'self':同源(同协议、域名、端口)
'none':禁止加载该类型所有资源
unsafe-inline:允许内联脚本、内联样式(能不用就不用,CSP 最核心就是干掉 inline 脚本)
unsafe-eval:允许 eval、new Function 等动态代码执行,高危,尽量禁止
data::base64 内嵌图片等
shturl.cc/yyMmO:指定可信第三方域名白名单
4. 核心指令清单(面试高频)
default-src:兜底默认源,所有没单独配置的资源类型继承这个策略(最佳实践优先配置)
script-src:JS 脚本(重中之重,XSS 防御核心)
style-src:CSS 样式
img-src:图片
font-src:字体
connect-src:fetch、axios、websocket 请求
frame-src:iframe 嵌入页面(防点击劫持、恶意嵌入)
object-src:flash、插件,现代站点建议 object-src 'none'
report-uri / report-to:违规日志上报地址
最简安全示范(报告模式)
Content-Security-Policy-Report-Only:
default-src 'self';
script-src 'self' shturl.cc/FpMHZ8pIl;
style-src 'self';
img-src 'self' data:;
connect-src 'self';
frame-src 'none';
object-src 'none';
report-uri /csp-report;
二、CSP 从零上线标准全流程(面试最核心大题:怎么落地 CSP,步骤是什么)
标准答案流程:需求评估 → 收集资源清单 → 开启 Report-Only 灰度 → 持续采集违规日志 → 修复内联脚本 /eval → 扩充白名单 → 小流量试切正式头 → 全量发布 → 持续监控迭代
Step1:前期评估与资源测绘
梳理站点所有页面、SPA 路由、第三方 SDK(统计、埋点、广告、验证码、地图、客服)
区分:外部 JS、CDN 脚本、内联 script、onclick 事件、eval、动态创建 script、iframe
风险识别:老项目大量内联脚本、模板引擎拼接 JS、第三方脚本多,CSP 落地难度高
面试题:老项目大量 inline 脚本怎么处理?答:优先迁移到外部 JS 文件;无法迁移的,使用 nonce 随机值 或者 hash 摘要 替代 unsafe-inline。
✅ nonce 方案(推荐)后端每次请求生成一次性随机 nonce,放在 HTTP 头 script-src 'nonce-abc123xxx',内联脚本增加属性
-
CSP面试宝典实战教程:从零到上线全流程CSP(Content-Security-Policy 内容安全策略)面试宝典实战教程|从零到上线全流程面向 Web 安全、渗透测试、后端开发、前端安全岗面试;CSP 核心定位:浏览器端白名单安全机制,纵深防御,主要用来对抗 XSS、资源注入、点击劫持MDN Web Do... 主线:原理 → 指令语法 → 两种部...
-
为什么你需要学D3.js?5个说服自己的理由为什么你需要学 D3.js?5个说服自己的理由 1. 它是可视化领域的“底层能力”,不是普通图表库D3.js 的定位不是 ECharts、Chart.js 那种开箱即用的图表库,而是数据驱动的 DOM 操作引擎。 它直接操作 SVG、Canvas 和 HTML,给你像素级控制权。 这意味着你可以从零构建任何可...
-
2026年移动端适配指南最新趋势与最佳实践2026 移动端适配指南:最新趋势与最佳实践核心总趋势:从 “固定断点响应式” 升级为流体自适应 + 组件级容器查询;适配边界从普通手机延伸折叠屏、三折叠、多窗口、外接屏;适配不再只是页面排版,而是融合性能、无障碍、系统偏好、触控交互一体化。移动端优...
-
一文看懂React Hooks流程,别再被面试官问倒了一文看懂 React Hooks 流程,别再被面试官问倒了React Hooks 的底层机制其实不复杂,核心就一句话:React 靠“调用顺序 + 链表”来记住每个 Hook 的状态。一次渲染里,Hooks 的真实顺序组件每次渲染都会经历这些阶段:执行组件函数,按顺序调用 useState、useMemo、useCallback、...
-
搞懂Qwik,你的前端之路会顺畅很多Qwik 的核心价值在于把前端性能瓶颈从「怎么优化水合」变成了「根本不需要水合」。它不是 React 的替代品,而是针对首屏可交互时间(TTI)这个特定问题的全新解法。Qwik 到底解决了什么传统 SSR 框架(Next.js、Nuxt 等)的流程是:服务端渲染 HTML → 客户端下载 JS → 重新...
-
【推荐收藏】PWA怎么做全套资源大合集推荐收藏】PWA 怎么做全套资源大合集一句话总纲:PWA = HTTPS + manifest.json 应用清单 + Service Worker 服务工作线程三大基石;实现桌面安装、离线可用、推送通知、独立窗口运行;本文包含原理、最简代码、缓存策略、工具链、模板、调试、打包上架、踩坑清单,适合原生 ...