OWASP 基本上代表开放 Web 应用程序安全项目,它是一个由数万名成员和数百个章节组成的非营利性全球在线社区,提供 Web 应用程序安全领域的文章、文档、工具和技术。
每三到四年,OWASP 会修订并发布其排名前 10 位的 Web 应用程序漏洞列表。该列表不仅包含最常见的前 10 个漏洞,还包含每个漏洞的潜在影响以及如何避免它们。 OWASP 十大 Web 应用程序安全风险最近于 2017 年更新,它基本上为开发人员和安全专业人员提供了有关 Web 应用程序中最常见且易于利用的最关键漏洞的指导。 OWASP 的前 10 名被认为是 Web 应用程序安全最佳实践的重要指南。
2020 年排名前 10 的 OWASP 漏洞是:
- 注射
- 损坏的身份验证
- 敏感数据暴露
- XML 外部实体 (XXE)
- 损坏的访问控制
- 安全配置错误
- 跨站脚本 (XSS)
- 不安全的反序列化
- 使用具有已知漏洞的组件
- 日志记录和监控不足。
1. 注射
当攻击者使用查询或命令通过 SQL、OS、NoSQL 或 LDAP 注入将不受信任的数据插入解释器时,就会出现注入漏洞。通过此攻击向量注入的数据使应用程序执行其不适合的操作。并非所有应用程序都容易受到这种攻击,只有接受参数作为输入的应用程序才容易受到注入攻击。
可以通过以下方式防止注入攻击
- 使用更安全的 API 避免使用解释器
- 编码时使用参数化查询
- 将命令与数据隔离以避免暴露于攻击
2. 破解认证
Broken Authentication 是一个漏洞,允许攻击者使用手动或自动方法来尝试控制他们想要的系统中的任何帐户。在更糟糕的情况下,他们还可以获得对系统的完全控制。这个漏洞也更危险,因为身份验证漏洞被破坏的网站在网络上非常普遍。当应用程序错误地执行与会话管理相关的功能允许入侵者破坏密码、安全密钥或会话令牌时,通常会发生身份验证失效。
可以通过以下方式防止损坏的身份验证攻击
- 实施多因素身份验证
- 保护用户凭据
- 通过加密连接发送密码
3. 敏感数据暴露
此漏洞是 OWASP 列表中最普遍的漏洞之一,当应用程序和 API 没有正确保护敏感数据(例如财务数据、社会安全号码、用户名和密码或健康信息)时就会发生,这使攻击者能够获取此类信息并进行欺诈或窃取身份。
可以通过以下方式防止敏感数据暴露攻击
- 使用安全 URL
- 使用强大且唯一的密码
- 加密所有需要存储的敏感信息
4. XML 外部实体 (XXE)
此漏洞发生在解析 XML 输入的 Web 应用程序中。当配置不当的 XML 处理器评估 XML 文档中的外部实体引用并将敏感数据发送到未经授权的外部实体(即,硬盘驱动器等存储单元)时,就会发生这种情况。默认情况下,大多数 XML 解析器都容易受到 XXE 攻击。
可以通过以下方式防止 XXE 攻击
- 使用不太复杂的数据格式,例如 JSON
- 保持 XML 处理器和库升级
- 使用 SAST 工具
5. 损坏的访问控制
当对资源的访问中断时会出现此漏洞,这意味着对经过身份验证的用户存在一些配置不当的缺失限制,允许他们访问未经授权的功能或数据,例如访问其他帐户、机密文档等。对于这种攻击,攻击者利用会话管理的帮助并尝试从未过期的会话令牌中访问数据,这使他们可以访问许多有效的 ID 和密码。
可以通过以下方式防止损坏的访问控制攻击
- 删除不再需要或不活跃的帐户
- 关闭不必要的服务,减轻服务器负担
- 使用渗透测试
6. 安全配置错误
据估计,高达 95% 的云漏洞是人为错误的结果,这一事实将我们引向了下一个称为安全配置错误的漏洞。此漏洞是指旨在确保应用程序数据安全的安全措施实施不当。正如我们所知,开发人员的工作基本上是在网站的功能上而不是在安全上,这个漏洞允许黑客跟踪安全配置并找到进入网站的新可能方法。此漏洞最常见的原因不是修补或升级系统、框架和组件。
可以通过以下方式防止安全配置错误攻击
- 使用动态应用程序安全测试 (DAST)
- 禁用默认密码
- 关注云资源、应用和服务器
7. 跨站脚本(XSS)
这也是一个普遍存在的漏洞,几乎影响了所有 Web 应用程序的 53%。 XSS 漏洞允许黑客将恶意客户端脚本注入网站,然后使用 Web 应用程序作为攻击媒介劫持用户会话,或将受害者重定向到恶意网站。
可以通过以下方式防止跨站点脚本攻击
- 使用适当的响应头
- 过滤输入和编码输出
- 使用内容安全策略
- 对用户输入应用零信任方法
8. 不安全的反序列化
不安全反序列化漏洞允许攻击者远程执行应用程序中的代码、篡改或删除序列化(写入磁盘)对象、进行注入攻击、重放攻击和提升权限。这种攻击也称为不受信任的反序列化。这是一个严重的应用程序安全问题,会影响大多数现代系统。
可以通过以下方式防止不安全的反序列化攻击
- 实现数字签名
- 使用渗透测试
- 隔离反序列化的代码并在低权限环境中运行以防止未经授权的操作
9. 使用已知漏洞的组件
现在有许多开源和免费提供的软件组件(库、框架)可供开发人员使用,如果出现任何具有已知漏洞的组件,那么它就会成为一个薄弱环节,可以影响整个系统的安全性。应用。这也是因为开发人员经常不知道他们的应用程序中存在哪些开源和第三方组件,这使得开发人员在当前版本中发现新漏洞时很难更新组件。
可以通过以下方式阻止这种攻击
- 删除所有不必要的依赖项
- 使用虚拟补丁
- 仅使用来自官方和经过验证的来源的组件
10. 日志记录和监控不足
据估计,从攻击到检测的时间可能长达 200 天,而且通常更长。与此同时,攻击者可以篡改服务器、破坏数据库并窃取机密信息。安全系统的日志记录不足和无效集成允许攻击者转向其他系统并维持持续威胁。
可以通过以下方式防止日志记录和监控不足的攻击
- 实施日志记录和审计软件
- 建立有效的监控系统
- 像攻击者一样思考并使用渗透测试方法