内容提要
本文基于OWASP Top 10(2021)介绍Web安全十大风险,包括访问控制失效、加密失效、注入、不安全设计、配置错误、过时组件、身份认证失效、完整性失效、日志监控失效和SSRF,并通过真实代码案例展示SQL注入、XSS、CSRF、文件上传等漏洞及修复方法,同时介绍WAF、SAST、DAST等防御工具与安全开发流程。
延伸解读
从OWASP Top 10看防御优先级
文章基于OWASP Top 10 (2021)列举了十大Web安全风险,并指出注入攻击和身份认证失效在攻击中占比最高。这提示开发者在资源有限时,可优先关注访问控制、加密机制和注入防御。同时,每个风险都配有代码案例,说明漏洞往往源于编码习惯,而非复杂攻击。
代码案例揭示的常见误区
文章通过SQL注入、XSS、CSRF、文件上传等漏洞的漏洞代码与修复代码对比,展示了安全编码的具体做法。例如,使用参数化查询替代字符串拼接、输出编码防XSS、从服务端session获取用户身份而非请求参数。这些案例表明,许多漏洞可通过遵循安全开发规范避免。
防御工具与安全开发流程的结合
文章介绍了WAF、SAST、DAST等防御工具,并强调将安全融入SDL各阶段,如需求阶段的安全分析、设计阶段的威胁建模、编码阶段的SAST、测试阶段的DAST。这种全流程 approach 说明安全不是单点工具,而是需要贯穿开发始终的持续过程。
应急响应与持续学习
文章最后给出了应急响应流程(检测、抑制、根除、恢复、复盘)和学习路径(阅读官方文档、靶场练习、考取认证)。这提醒读者,安全事件发生后需有预案,而日常通过靶场和文档持续学习,能帮助开发者跟上不断演变的威胁。
Q&A
OWASP Top 10 (2021) 包含哪些安全风险?
OWASP Top 10 (2021) 包含以下十类风险:A01 访问控制失效、A02 加密机制失效、A03 注入、A04 不安全设计、A05 安全配置错误、A06 易受攻击和过时的组件、A07 身份认证失效、A08 软件和数据完整性失效、A09 安全日志和监控失效、A10 服务端请求伪造 (SSRF)。
如何修复访问控制失效漏洞?
修复访问控制失效漏洞应遵循以下原则:永远从服务端获取当前用户身份,而不是依赖客户端传入的参数;每次请求都进行权限校验,不要依赖前端隐藏按钮;强制使用最小权限原则;默认拒绝,只允许明确授权的访问。例如,在代码中应从 session 获取 user_id,而不是从请求参数中获取。
SQL注入漏洞如何修复?
修复SQL注入漏洞应使用参数化查询(预编译语句),避免直接拼接SQL字符串。例如,在Python中可以使用 cursor.execute("SELECT * FROM users WHERE id=%s", (user_id,)),在Java中使用 PreparedStatement,在PHP中使用PDO预处理。参数化查询确保用户输入被当作数据而不是代码执行。
如何防御XSS攻击?
防御XSS攻击的主要措施包括:对输出进行HTML转义(如使用escape函数);设置Content-Security-Policy (CSP) 限制脚本来源;为Cookie设置HttpOnly和Secure属性,防止JavaScript窃取;对用户输入进行验证和过滤。存储型XSS还需在数据存储和输出时都进行编码。
SSRF漏洞如何修复?
修复SSRF漏洞需要对用户提供的URL进行严格校验:只允许http和https协议;解析主机名对应的IP地址,禁止访问内网地址(如私有IP、回环地址、保留地址);设置请求超时;使用白名单限制可访问的域名或IP。例如,可以使用ipaddress模块检查IP是否私有。
有哪些常用的Web安全防御工具?
常用的Web安全防御工具包括:WAF(Web应用防火墙)如ModSecurity、Cloudflare WAF、阿里云WAF;SAST(静态扫描)如SonarQube、Semgrep、Bandit;DAST(动态扫描)如OWASP ZAP、Burp Suite;SCA(软件成分分析)如Snyk、Dependabot、OWASP Dependency-Check;以及漏洞扫描平台如Vulners、CVE Details、NVD。
安全开发流程SDL包括哪些阶段?
安全开发流程SDL包括六个阶段:需求阶段进行安全需求分析;设计阶段进行威胁建模(如STRIDE);编码阶段遵循安全编码规范并使用SAST;测试阶段进行DAST和渗透测试;发布阶段进行安全审计和配置基线;运维阶段进行漏洞监控和应急响应。