应用安全

大多数安全漏洞不是攻击者的技术有多高明,而是开发者的疏忽。OWASP Top 10 中列举的漏洞,有超过 80% 可以在编码阶段避免。然而现实中,安全往往被视为「事后检测」的工作,而非「从设计开始」的内生能力。

本专题覆盖应用安全的完整知识体系:从安全开发生命周期(SDL)和威胁建模方法论,到 SQL 注入、XSS、CSRF、SSRF 等常见漏洞的原理与防护,再到 SAST、DAST、IAST、RASP 等安全测试技术的深度对比,帮助你在开发过程的每个阶段构建防御能力。

核心内容

安全开发

常见漏洞

日志与敏感信息

安全测试

审计与响应

防御层次

flowchart TB
    subgraph Design[设计阶段]
        A[威胁建模]
        B[安全设计评审]
    end
    subgraph Development[开发阶段]
        C[安全编码规范]
        D[SAST 代码扫描]
    end
    subgraph Testing[测试阶段]
        E[DAST 黑盒测试]
        F[IAST 插桩测试]
        G[SCA 依赖扫描]
    end
    subgraph Production[生产阶段]
        H[RASP 运行时防护]
        I[安全监控告警]
    end
    Design --> Development --> Testing --> Production

思考题

问题 1:XSS 的三种类型(反射型、存储型、DOM 型)中,哪一种危害最大?为什么 CSP 能够有效缓解 XSS 攻击?

参考答案

存储型 XSS 危害最大,因为它将恶意脚本永久存储在服务器端,所有访问该数据的用户都会受到攻击,无需诱导用户点击特定链接。反射型 XSS 需要用户主动触发链接,DOM 型 XSS 纯前端执行,危害范围相对有限。

CSP(Content Security Policy)通过声明允许执行的脚本来源,阻止未经授权的脚本执行。例如 script-src 'self' 只允许加载同源脚本,即使攻击者注入了 <script> 标签,浏览器也不会执行。但 CSP 不是万能的——如果业务本身就需要内联脚本,CSP 需要精细配置,否则容易被绕过。

问题 2:SAST 和 RASP 都能检测 SQL 注入,它们有什么本质区别?在实际项目中应该如何组合使用?

参考答案

SAST 是静态分析(不运行代码),在编码阶段发现漏洞,降低修复成本;RASP 是运行时检测(需要运行代码),在攻击发生时阻断,无法修复代码本身但能防护未知漏洞。

最佳组合策略:CI/CD 阶段集成 SAST(拦截低垂果实)、QA 阶段集成 DAST(验证运行时行为)、生产环境部署 RASP(最后防线)。SAST 发现漏洞后需要修复代码,RASP 发现攻击后是实时阻断。两者互补而不是替代关系——SAST 解决「漏洞从哪里来」,RASP 解决「攻击来了怎么办」。