Web 应用常见漏洞与防御:OWASP Top 10 实战讲解

Web 应用常见漏洞与防御:OWASP Top 10 实战讲解

💡 原文中文,约13100字,阅读约需32分钟。
📝

内容提要

本文基于OWASP Top 10(2021版)介绍Web应用常见安全漏洞,包括访问控制失效、加密机制失效、注入、不安全设计、安全配置错误、过时组件、身份认证失效、数据完整性失效、日志监控失效及SSRF等。通过真实案例与代码示例,讲解漏洞原理、攻击方式及修复方法,并强调零信任、纵深防御、最小权限等安全原则,旨在帮助开发者建立完整防护意识。

🔎

延伸解读

从服务端获取身份,而非信任客户端输入

文章强调访问控制失效的根源在于直接使用客户端传入的参数(如 user_id)查询数据,攻击者可轻易遍历他人数据。修复的关键是改为从服务端 session 获取当前用户身份,并坚持“默认拒绝”原则。这提醒开发者,任何来自客户端的标识符都不可信,权限校验必须基于服务端会话,而非前端隐藏或参数传递。

密码存储与传输:算法选择决定安全底线

文中对比了 MD5 与 bcrypt 的差异,指出 MD5 因速度快易被彩虹表破解,而 bcrypt 通过加盐和成本因子(rounds=12)显著提高破解难度。同时强调 HTTPS 与 HSTS 的配置,防止传输层窃听。开发者应避免自研加密算法,优先采用经过验证的标准库,并确保敏感数据在存储和传输中都得到保护。

注入防御:参数化查询与输出编码缺一不可

文章通过 SQL 注入、命令注入、XSS 和 SSTI 的示例,展示了拼接用户输入直接执行或渲染的危险性。修复方案统一指向参数化查询、子进程参数列表、HTML 转义及模板变量。这提示开发者,所有外部输入都应视为不可信数据,需在进入数据库、系统命令或页面输出前进行相应处理,并配合 CSP、HttpOnly 等安全头加固。

安全配置与组件更新:容易被忽视的防线

文中列举了默认账号、调试模式、目录浏览等常见配置错误,并建议通过安全 HTTP 头、关闭不必要功能来加固。同时强调过时组件和供应链攻击的风险,推荐使用依赖锁定和 SCA 工具定期扫描。这些措施虽不直接修复业务逻辑漏洞,但能显著缩小攻击面,是纵深防御中不可或缺的一环。

Q&A

OWASP Top 10 2021 中排名第一的漏洞是什么?

A01 访问控制失效(Broken Access Control)

如何修复SQL注入漏洞?

使用参数化查询或预编译语句,避免字符串拼接SQL。例如在Python中使用%s占位符,在Java中使用PreparedStatement,在PHP中使用PDO prepare。

密码存储应该使用什么算法?

推荐使用bcrypt、Argon2或scrypt,不推荐使用MD5、SHA1或SHA256。bcrypt示例:使用bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))。

如何防止暴力破解登录?

实施登录失败锁定策略,例如使用Flask-Limiter限制每分钟登录尝试次数,或使用Django Axes在多次失败后锁定账号。

什么是SSRF漏洞?如何防御?

SSRF(服务端请求伪造)是服务端未严格校验用户提供的URL,导致攻击者可以访问内网资源。防御方法包括:校验URL协议只允许http/https,解析域名并检查IP是否内网地址(如私有IP、回环地址),并设置超时。

如何安全地处理文件上传?

安全处理文件上传需:1. 检查文件大小;2. 使用magic库检测真实MIME类型,不依赖客户端Content-Type;3. 限制扩展名白名单;4. 重新生成随机文件名,避免路径覆盖和注入。

OWASP Top 10 2021 中A09是什么?

A09是安全日志和监控失效(Security Logging & Monitoring Failures),强调记录登录失败、权限校验失败等关键事件,并集成SIEM和告警规则。

如何防止XSS攻击?

防止XSS攻击的方法包括:对输出进行HTML转义(如使用escape函数),设置Content-Security-Policy头,以及使用HttpOnly Cookie防止cookie窃取。

🏷️

标签

➡️

继续阅读