信息安全工程师 · 高频练习

CSP中的nonce固定写死在模板里,为什么仍可能被攻击者利用?

中级 单选题 第 1116 题 较难 信息安全工程师CSPnonceXSS内容安全策略
题目

网站使用Content-Security-Policy允许带指定nonce的内联脚本执行,但开发人员把nonce固定为company2026并长期复用。最合适的改进是()。

A 继续固定使用,字符串越容易记越安全
B 加入unsafe-inline,让所有内联脚本都可执行
C 把同一nonce公开写进所有用户可控HTML片段
D 每次HTTP响应生成足够随机、不可预测的唯一nonce,只赋给服务器确认可信的脚本
题目类型:原创高频练习题 用途:用于帮助理解信息安全工程师相关考点和答案解析,不等同于官方真题。
正确答案
D
答案解析

nonce是一次性授权凭证。攻击者若能预测或复用固定值,就可给注入脚本带上相同nonce绕过限制。服务端应逐响应生成强随机值,并谨慎决定哪些脚本标签获得它。

选项分析

A

错误。可预测和重复使用正是主要风险。

B

错误。unsafe-inline会大幅放宽内联脚本执行,削弱策略。

C

错误。把nonce赋给不可信片段会替攻击代码完成授权。

D

正确。逐响应唯一、强随机并限制授予对象,符合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必须逐响应生成强随机、不可预测的唯一值,并且只授予可信脚本;固定复用会让注入脚本有机会绕过策略。