网站使用Content-Security-Policy允许带指定nonce的内联脚本执行,但开发人员把nonce固定为company2026并长期复用。最合适的改进是()。
nonce是一次性授权凭证。攻击者若能预测或复用固定值,就可给注入脚本带上相同nonce绕过限制。服务端应逐响应生成强随机值,并谨慎决定哪些脚本标签获得它。
选项分析
错误。可预测和重复使用正是主要风险。
错误。unsafe-inline会大幅放宽内联脚本执行,削弱策略。
错误。把nonce赋给不可信片段会替攻击代码完成授权。
正确。逐响应唯一、强随机并限制授予对象,符合nonce的安全用途。
本题为什么容易错
配置了CSP不代表自动安全。真正关键的是浏览器凭什么信任某段脚本;若授权值可猜、可复用,策略只剩形式。
简短答案
CSP中的nonce固定写死在模板里,为什么仍可能被攻击者利用,正确答案是 D(每次HTTP响应生成足够随机、不可预测的唯一nonce,只赋给服务器确认可信的脚本)。nonce是一次性授权凭证。攻击者若能预测或复用固定值,就可给注入脚本带上相同nonce绕过限制。服务端应逐响应生成强随机值,并谨慎决定哪些脚本标签获得它。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 继续固定使用,字符串越容易记越安全 | 本题干扰项 | 错误。可预测和重复使用正是主要风险。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 加入unsafe-inline,让所有内联脚本都可执行 | 本题干扰项 | 错误。unsafe-inline会大幅放宽内联脚本执行,削弱策略。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 把同一nonce公开写进所有用户可控HTML片段 | 本题干扰项 | 错误。把nonce赋给不可信片段会替攻击代码完成授权。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 每次HTTP响应生成足够随机、不可预测的唯一nonce,只赋给服务器确认可信的脚本 | 本题正确答案 | 正确。逐响应唯一、强随机并限制授予对象,符合nonce的安全用途。 | 看到题干核心场景时优先联想到它 |
本题易混淆选项怎么区分
- 继续固定使用,字符串越容易记越安全:错误。可预测和重复使用正是主要风险。
- 加入unsafe-inline,让所有内联脚本都可执行:错误。unsafe-inline会大幅放宽内联脚本执行,削弱策略。
- 把同一nonce公开写进所有用户可控HTML片段:错误。把nonce赋给不可信片段会替攻击代码完成授权。
知识点详解
浏览器比较响应头script-src中的nonce与脚本元素nonce属性,匹配才允许执行。策略值必须不可预测且每次响应更新;静态脚本也可考虑使用内容哈希,但脚本内容变化后需同步更新哈希。
备考速记
nonce像一次性登机牌:每次换新,只发给确认过的乘客。
CSP 在内容安全策略场景中的作用
动态页面由服务端生成128位以上随机值,同时写入CSP头和少量可信script标签。用户评论即使注入script,也拿不到下一次响应的授权值。
同类题怎么考
- 判断固定CSP nonce的风险。
- 选择严格CSP对内联脚本的授权方式。
CSP 在信息安全工程师软考中的考法
题干出现固定、全站共用、长期复用nonce,直接判为错误;正确选项还应限制nonce只授予可信脚本。
解题思路
nonce这个词本身就提示‘只用一次’。固定company2026相当于把门禁密码贴在门上,攻击者可直接复用,因此选D。
考点定位
CSP是纵深防御,不替代上下文输出编码、输入处理和安全DOM API。nonce泄露或错误传播仍可能造成绕过。
易错提醒
- 页面缓存复用包含nonce的完整HTML响应。
- 模板中给所有script标签无差别自动补nonce。
- 只部署Report-Only策略,却误以为违规脚本已被阻止。
备考提示
- 记住nonce三点:强随机、每响应唯一、只给可信脚本。
- 同时复习hash方案与unsafe-inline的差异。
你可能还想了解
- CSP nonce为什么不能固定?
- nonce需要每个请求都变化吗?
- 配置CSP后还需要输出编码吗?
本文小结
CSP nonce必须逐响应生成强随机、不可预测的唯一值,并且只授予可信脚本;固定复用会让注入脚本有机会绕过策略。