OWASP Top 10 与 Java 防御

共 19 题
#

1. XSS(跨站脚本)的 Java 防御,输出编码、CSP、HttpOnly 如何落地

A 只要设置 HttpOnly 标志就能完全防 XSS
B CSP 可以替代输出编码,无需转义
C 输出编码只对反射型 XSS 有效
D 用输出编码(HtmlUtils/OWASP Encoder)按上下文转义,配 CSP 响应头与 HttpOnly Cookie 形成纵深防御 ✓ 正确答案
#

2. 敏感数据泄露的 Java 防御,加密、脱敏、日志安全如何落地

A 日志可以记录完整敏感字段以便排查
B 只要数据库加密即可防止所有泄露
C 传输用 TLS、静态用 AES-GCM 加密、对外展示脱敏、日志过滤敏感明文,覆盖数据全生命周期 ✓ 正确答案
D 脱敏与加密是同一概念,可互相替代
#

3. 认证失效(Broken Authentication)的 Java 防御,密码哈希、Session 管理如何落地

A 用 BCrypt/Argon2 加盐慢哈希存储密码,配合会话轮换、过期、HttpOnly/SameSite Cookie 与防爆破 ✓ 正确答案
B 密码用 MD5 加密存储即可
C 登录后无需轮换 Session ID
D Session 可以永不过期,提升体验
#

4. OWASP 安全响应头(HSTS/X-Frame-Options/CSP/Referrer-Policy)在 Spring Security 中的配置

A Spring Security 默认不启用任何安全响应头
B CSP 可以随意配置为非常宽松,不影响功能
C 通过 headers() DSL 可配置 HSTS、X-Frame-Options、CSP、Referrer-Policy 等,且默认启用部分安全头 ✓ 正确答案
D HSTS 在 HTTP 环境下也会生效
#

5. 注入攻击(SQL 注入、LDAP 注入、命令注入)的 Java 防御方案

A SQL 用参数化、LDAP 转义、命令用 ProcessBuilder 参数数组,配合白名单与最小权限,核心是数据与代码分离 ✓ 正确答案
B Runtime.exec(String) 拼接用户输入是安全的
C 注入攻击与数据呈现无关,无法防御
D 只要对输入做单引号转义就能防所有注入
#

6. XSS 与 CSRF 的 Java 防御,输出编码、CSP 头与 CSRF Token 如何实现?

A XSS 与 CSRF 是同一类攻击,用相同方案防御
B XSS 用输出编码与 CSP 防御,CSRF 用 CSRF Token 与 SameSite 防御,且防 XSS(HttpOnly)也是防 CSRF 的前提 ✓ 正确答案
C CSRF 防护无需 CSRF Token,只需验证码
D 只要启用 CSRF 防护就无需担心 XSS
#

7. XXE(XML 外部实体)攻击的 Java 防御,禁用 DTD、外部实体如何配置

A 只要设置 FEATURE_SECURE_PROCESSING 就完全防 XXE
B XXE 只能造成 DoS,无法读取文件
C 优先禁用 DTD(disallow-doctype-decl),或关闭外部实体,并对所有 XML 解析器统一安全配置 ✓ 正确答案
D 只需配置 DocumentBuilderFactory,其他解析器无需处理
#

8. 反序列化漏洞的 Java 防御,ObjectInputFilter、白名单、替代方案如何选择

A 黑名单比白名单更安全
B 原生序列化无需任何过滤即可安全使用
C 反序列化漏洞无法执行任意代码
D 用 ObjectInputFilter 设置白名单限制可反序列化类,并优先用 JSON 等安全格式替代原生序列化 ✓ 正确答案
#

9. 安全配置错误的 Java 防御,默认配置、暴露信息、不必要功能如何处理

A 错误响应应包含完整堆栈以方便调试
B 默认账号密码无需修改
C 所有 actuator 端点都应公开暴露
D 加固默认配置、避免错误信息暴露内部细节、关闭不必要的功能与端点,最小化攻击面 ✓ 正确答案
#

10. 日志与监控不足的 Java 防御,审计日志、入侵检测、异常告警如何建设

A 日志只要记录请求即可,无需审计敏感操作
B 记录安全审计日志、监控异常行为做入侵检测、对异常事件实时分级告警,形成安全运营闭环 ✓ 正确答案
C 异常告警不需要阈值与分级
D 安全事件只需事后看日志,无需实时监控
#

11. 不安全反序列化漏洞,Java 原生序列化的风险与白名单/替代方案如何?

A 原生序列化 readObject 可被 gadget 链利用,应优先用 JSON/Protobuf 替代,必须用时用 ObjectInputFilter 白名单 ✓ 正确答案
B Java 原生序列化格式安全,可放心使用
C 白名单比不信任数据更不重要
D 反序列化无法执行任意代码风险
#

12. 开放重定向(Open Redirect)漏洞的产生与 Java 防御

A 只要目标以 http:// 开头就安全
B 协议相对 URL // 是安全的
C 开放重定向不影响用户安全
D 精确解析重定向目标 host 做白名单,优先用相对路径,拒绝 //、@、编码绕过与 javascript: 等危险形式 ✓ 正确答案
#

13. 文件上传安全,扩展名校验、内容检测、存储隔离与图片重编码如何实施

A 只需校验扩展名即可防所有上传攻击
B 用户原始文件名可安全用于存储
C 图片文件中不可能嵌入恶意载荷
D 扩展名白名单加内容魔数双校验、存储隔离与随机文件名、图片重编码去除恶意载荷,防范路径穿越 ✓ 正确答案
#

14. Java 中 SQL 注入的防御,预编译占位符 vs 字符串拼接,MyBatis ${} 的风险如何?

A 预编译占位符(#{})把输入作为数据安全,${} 直接拼接存在注入风险,仅用于动态标识符且须白名单校验 ✓ 正确答案
B ${} 与 #{} 一样安全,都走预编译
C 字符串拼接经过转义即可安全
D LIKE 查询通常只能用字符串拼接,无法参数化
#

15. 访问控制失效(Broken Access Control)的 Java 防御,Spring Security 方法级安全如何配置

A 前端隐藏按钮即可防越权
B 用 @PreAuthorize 方法级安全与对象级授权校验资源归属,结合 URL 授权与默认拒绝,防止越权 ✓ 正确答案
C 服务端只需校验登录,无需校验权限
D 方法级安全无法做对象级授权
#

16. 使用含已知漏洞组件的 Java 防御,依赖扫描、SBOM、CVE 监控如何实施

A 依赖一旦引入就不会有漏洞,无需升级
B 用依赖扫描工具识别 CVE、生成 SBOM 清单并持续监控漏洞,及时升级修复,形成闭环 ✓ 正确答案
C SBOM 只用于开发,与安全无关
D 只要构建成功就说明依赖安全
#

17. SSRF 防护,URL 校验、DNS 重绑定与内网地址黑名单如何实现?

A 校验 URL scheme 与内网地址黑名单,并防 DNS 重绑定(请求前重新解析校验与禁止重定向),避免访问内网 ✓ 正确答案
B DNS 重绑定无需防护,校验一次即可
C 内网地址黑名单能覆盖所有 SSRF 场景
D 只要校验 scheme 就能防 SSRF
#

18. 安全依赖管理,OWASP Dependency-Check、SBOM 与漏洞修复流程如何?

A 发现漏洞后无需评估影响,直接升级即可
B 依赖管理只需锁定版本,无需扫描
C SBOM 用于记录用户密码,与依赖无关
D 用 OWASP Dependency-Check 扫描 CVE、生成 SBOM 清单、持续监控漏洞并执行分级修复流程 ✓ 正确答案
#

19. 水平越权(IDOR)与垂直越权的检测与对象级授权实现

A 通过安全测试与授权事件审计检测越权,用 owner 绑定与 @PreAuthorize 实现对象级授权,并写授权测试 ✓ 正确答案
B 前端隐藏 id 字段即可防 IDOR
C 对象级授权只需校验登录,无需校验归属
D 越权无法通过自动化测试发现