OWASP Top 10 与注入攻击防御

共 17 题
#

1. OWASP Top 10 的 A03(Injection)的 SQL/NoSQL/LDAP/XPath 注入原理

A 注入攻击只发生在 SQL 数据库上
B 注入的共同根因是把不可信输入当作有语义的代码/查询片段拼接进解释器 ✓ 正确答案
C 只要过滤了引号等特殊字符就能彻底防止注入
D NoSQL 注入因为不使用 SQL 语法所以无法避免
#

2. SQL Injection 的防御"金标准"中参数化查询(parameterized queries)与预编译语句(prepared statements)

A 参数化查询通过转义用户输入中的特殊字符来防止注入
B 参数化查询把 SQL 语法与用户数据分离,数据只作为参数值绑定,无法改变语句语义 ✓ 正确答案
C 参数化查询只能用于 SELECT,不能用于 INSERT/UPDATE
D 参数化查询与字符串拼接在安全性上等价
#

3. SQL Injection(SQLi)的分类中 Union、Boolean、Time-based、Error-based、Out-of-band

A Time-based 注入通过在页面直接回显数据来提取信息
B Out-of-band 注入不需要任何网络通道
C Union-based 注入只能用于 Oracle 数据库
D Boolean-based 注入通过构造真假条件,对比页面响应差异来逐字节推断数据,属于盲注 ✓ 正确答案
#

4. SQL Injection 的 ORM 边界中 Hibernate HQL、Sequelize ORM 的 raw query 风险

A 使用 ORM 就完全免疫 SQL 注入
B ORM 可以安全地参数化表名和列名
C ORM 的参数绑定路径是安全的,但 raw query 或字符串拼接 HQL/原生 SQL 会重新暴露注入面 ✓ 正确答案
D HQL 不可能被注入,只有原生 SQL 有风险
#

5. NoSQL Injection 的 MongoDB $where、$regex、$ne 等操作符注入

A NoSQL 数据库不存在注入风险
B 通过把 `$ne`、`$gt` 等操作符作为对象传入查询条件,可绕过身份校验,属于操作符注入 ✓ 正确答案
C `$where` 只接受布尔值,无法被注入
D 只校验字段是否为空即可防止 NoSQL 注入
#

6. Command Injection(OS Command)的 shell 元字符注入(;、|、&、$、backticks)

A 命令注入只发生在 Windows 系统
B 用 `ProcessBuilder`/`subprocess` 以参数数组形式执行命令,不经 shell 解释,可避免元字符注入 ✓ 正确答案
C 过滤掉分号即可完全防止命令注入
D shell 元字符没有安全风险
#

7. OWASP ASVS(Application Security Verification Standard)V4.0 的输入输出验证

A ASVS 要求优先采用白名单验证,并在信任边界处做规范化,同时用上下文感知的输出编码做纵深防御 ✓ 正确答案
B ASVS 提倡用黑名单过滤所有输入
C ASVS 只关注输入验证,不涉及输出编码
D ASVS 是必须强制执行的法规
#

8. OWASP A03 的 Cross-site Scripting(XSS)的反射型(Reflected)

A 反射型 XSS 会持久化存储在服务器数据库中
B 反射型 XSS 只能通过表单提交触发
C 反射型 XSS 不需要任何用户交互
D 反射型 XSS 的恶意脚本被服务端立即反射回响应中执行,需诱导用户点击,是非持久化的 ✓ 正确答案
#

9. OWASP A03 的 XSS DOM-based(DOM 型)

A DOM 型 XSS 的载荷必须经过服务端反射
B 服务端输出编码一定可以防御 DOM 型 XSS
C DOM 型 XSS 是纯前端的漏洞,恶意数据从浏览器端 source 流向 innerHTML 等危险 sink ✓ 正确答案
D DOM 型 XSS 只能在老版本浏览器上出现
#

10. OWASP A03 的 XSS 存储型(Stored)

A 存储型 XSS 只在攻击者自己的浏览器上执行
B 存储型 XSS 把恶意脚本持久化存储,任何访问该内容的用户都会执行,危害最大 ✓ 正确答案
C 存储型 XSS 不需要持久化存储
D 存储型 XSS 只能通过 URL 参数触发
#

11. 注入攻击的类型中 SQL/命令/模板注入的防御?

A SQL 注入用参数化、命令注入避免 shell、模板注入不把用户输入当模板语法解析,共同点是让数据不进入语法层 ✓ 正确答案
B 三类注入各有不同,防御上没有共性
C 只要对输入做转义就能防御所有注入
D 模板注入只能用于服务端渲染的页面
#

12. XSS 的 CSP(Content Security Policy)的纵深防御

A CSP 能完全替代输出编码防御 XSS
B CSP 只能通过 `<meta>` 标签配置
C CSP 通过限制浏览器可加载和执行的内容来源,作为 XSS 的纵深防御,与输出编码互补 ✓ 正确答案
D 配置 `unsafe-inline` 不会削弱 CSP 防护
#

13. XSS 的防御中 Context-aware escaping(HTML、Attribute、JavaScript、CSS、URL)

A 编码必须与渲染上下文匹配,HTML/属性/JS/CSS/URL 各有不同的转义规则 ✓ 正确答案
B 所有上下文都使用同一种编码规则
C 属性上下文不需要转义引号
D 框架的 `v-html` 默认也会自动转义
#

14. XSS 的防御中输出编码与 CSP?

A 输出编码与 CSP 是互相替代的两种方案
B 有 CSP 就不需要输出编码
C 输出编码从源头消除 XSS,CSP 在注入发生后限制脚本执行,两者互补形成纵深防御 ✓ 正确答案
D CSP 能解决所有 XSS 问题
#

15. 不安全的反序列化中风险与缓解?

A 反序列化只可能导致数据丢失,无法执行代码
B 反序列化无需验证数据来源
C 只要数据来自 JSON 就绝对安全
D 恶意构造的序列化数据可在反序列化时触发对象构造甚至远程代码执行,需用白名单类、签名校验和更安全格式来缓解 ✓ 正确答案
#

16. 安全头配置中 CSP、HSTS 与 X-Frame-Options?

A HSTS 用于防御 XSS
B X-Content-Type-Options 用于设置 cookie 属性
C CSP 的作用是强制 HTTPS
D X-Frame-Options 防止页面被嵌入第三方 iframe,用于防御点击劫持 ✓ 正确答案
#

17. 输入校验与白名单中纵深防御?

A 黑名单校验能穷举所有恶意输入,比白名单更可靠
B 白名单校验只接受已知合法输入,默认拒绝异常,比黑名单更易维护且难以绕过 ✓ 正确答案
C 输入校验可以完全替代输出编码
D 输入校验是唯一的纵深防御手段