什么是 OWASP?什么是 OWASP Top 10?

开放式 Web 应用程序安全项目维护着最紧迫的 Web 应用程序安全问题的列表并定期更新。

OWASP Top 10 学习目标

阅读本文后,您将能够:

  • 定义 OWASP
  • 概述 OWASP Top 10 的每个项目

复制文章链接

什么是 OWASP?

开放式 Web 应用程序安全项目 (OWASP) 是致力于 Web 应用程序安全的国际非营利组织。OWASP 的核心原则之一是,他们的所有资料都免费提供并且可以在其网站上轻松访问,这使得任何人都能够改善自己的 Web 应用程序安全性。他们提供的材料包括文档、工具、视频和论坛。也许他们的最著名的项目是 OWASP Top 10。

什么是 OWASP 十大?

OWASP Top 10 是定期更新的报告,概述了 Web 应用程序安全性的安全问题,重点关注 10 个最关键的风险。该报告由来自世界各地的安全专家小组汇总而成。OWASP 将 Top 10 称为“意识文档”,他们建议所有公司将该报告纳入流程中,以最大程度地减少和/或防护安全风险。


以下是 OWASP Top 10 2017 报告中报告的安全风险:

1. 注入

当不被信任的数据通过表单输入或其他一些提交到 Web 应用程序的数据发送到代码解释器时,就会发生注入攻击。例如,攻击者可能向本应填写纯文本用户名的表单输入 SQL 数据库代码。如果该表单输入未得到正确保护,则将导致执行该 SQL 代码。这称为 SQL 注入攻击


可以通过验证和/或清除用户提交的数据来防止注入攻击。(验证表示拒绝看似可疑的数据,而清理指清除数据中可疑的部分。)此外,数据库管理员可以设置控件以最大程度地减少注入攻击可能接触的信息量。

2. 身份验证失效

攻击者可以通过身份验证(登录)系统中的漏洞访问用户帐户,甚至可以使用管理员帐户来破坏整个系统。例如,攻击者可以获取一个包含在数据泄露中获得的数千个已知用户名/密码组合的列表,并使用脚本尝试在登录系统上尝试所有这些组合,以查看是否有任何有效的组合。


一些防护身份验证漏洞的策略要求双要素身份验证 (2FA) 以及使用 Rate Limiting 限制或延迟重复的登录尝试。

3. 敏感数据暴露

如果 Web 应用程序不保护财务数据和密码等敏感数据,则攻击者可以访问这些数据并将其用于恶意目的。窃取敏感信息的一种热门方法是使用中间人攻击


通过加密所有敏感数据并禁用任何敏感信息的缓存*,可以最大程度地降低数据暴露风险。此外,Web 应用程序开发人员应注意确保避免不必要地存储任何敏感数据。


*缓存是一种临时存储数据以供重用的做法。例如,网络浏览器通常会缓存网页,这样一来,如果用户在特定时间段内重新访问这些页面,浏览器就不必从 Web 获取页面。

4. XML 外部实体 (XXE)

这是对解析 XML *输入的 Web 应用程序的攻击。此输入可以引用外部实体,以尝试利用解析器中的漏洞。在此处,“外部实体”是指存储单元,例如硬盘驱动器。攻击可以欺骗 XML 解析器将数据发送到未经授权的外部实体,然后后者可以将敏感数据直接传递给攻击者。


防止 XEE 攻击的最佳方法是让 Web 应用程序接受不太复杂的数据类型,例如 JSON**,或者至少给 XML 解析器打补丁并禁止在 XML 应用程序中使用外部实体。


*XML 全称可扩展标记语言,是一种旨在同时实现人类可读和机器可读的标记语言。由于其复杂性和安全性漏洞,许多 Web 应用程序现在已经逐步淘汰了这种语言。


**JavaScript 对象表示法 (JSON) 是一种简单的、人类可读的表示法,通常用于通过 Internet 传输数据。尽管 JSON 最初是为 JavaScript 创建的,但它不受语言限制,并且可以由许多不同的编程语言解释。

5. 访问控制中断

访问控制是指控制对信息或功能的访问权限的系统。损坏的访问控制使攻击者可以绕过授权并执行任务,就像他们是管理员等特权用户一样。例如,Web 应用程序可能允许用户仅通过更改 url 的一部分即可更改他们登录的帐户,而无需任何其他验证。


通过确保 Web 应用程序使用授权令牌*并对其设置严格的控制,可以确保访问控制的安全。


*许多服务在用户登录时都会发布授权令牌。用户发出每个特权请求都需要出示授权令牌。这是确保用户身份与声称相符的安全方法,而无需他们不断输入登录凭据。

6. 安全配置错误

安全配置错误是列表上最常见的漏洞,通常是使用默认配置或显示过多详细错误的结果。例如,一个应用程序可能在向用户显示错误时描述得过于详尽,以致于揭示出应用程序中的漏洞。这种情况可以通过删除代码中任何未使用的功能并确保错误消息更加笼统来防护。

7. 跨站点脚本

跨站点脚本漏洞在 Web 应用程序允许用户将自定义代码添加到 url 路径或其他用户可以看到的网站上时发生。利用此漏洞,可以在受害者的浏览器上运行恶意的 JavaScript 代码。例如,攻击者可以向受害者发送似乎来自受信任银行的电子邮件,并随附指向该银行网站的链接。链接可能在 URL 的末尾标记了一些恶意 JavaScript 代码。如果银行的站点没有得到适当的跨站点脚本保护,则当受害者单击链接时,该恶意代码将在受害者的 Web 浏览器中运行。


跨站点脚本的缓解策略包括对不受信任的 HTTP 请求转义以及验证和/或清除用户生成的内容。使用像 ReactJS 和 Ruby on Rails 这样的现代 Web 开发框架,还可以提供一些内置的跨站点脚本保护。

8. 不安全的反序列化

这种威胁的目标是各种经常对数据进行序列化和反序列化的 Web 应用程序。序列化意味着从应用程序代码中获取对象,并将其转换为可用于其他目的的格式,例如将数据存储到磁盘或对其进行流传输。反序列化则正好相反:将序列化的数据转回为应用程序可以使用的对象。序列化就像在搬家之前将家具打包到箱子里,而反序列化就像在搬家之后拆开箱子并组装家具。不安全的反序列化攻击就像搬家公司在拆箱之前篡改箱子中的物品。


不安全的反序列化漏洞利用是不可信来源的数据反序列化的结果,并可能导致严重的后果,例如 DDoS 攻击和远程代码执行攻击。尽管可以采取措施尝试检出攻击者,例如监视反序列化和实施类型检查,但防止不安全的反序列化攻击的唯一肯定有效的方法是禁止来自不受信任来源的数据反序列化。

9. 使用具有已知漏洞的组件

许多现代 Web 开发人员在其 Web 应用程序中使用库和框架之类的组件。这些组件是可帮助开发人员避免多余工作并提供所需功能的软件;常见的示例包括 React 等前端框架以及用于添加共享图标或 A/B 测试的小型库。一些攻击者会在这些组件中寻找漏洞,然后利用这些漏洞来组织攻击。一些较为热门的组件在数十万个网站上使用。攻击者如在其中一个组件中发现安全漏洞,就可能使数十万个站点易受攻击。


组件开发人员通常会提供安全补丁和更新程序来修补已知漏洞,但 Web 应用程序开发人员并不总是在其应用程序上运行组件的修补版本或最新版本。为了最大程度地降低运行具有已知漏洞的组件的风险,开发人员应从项目中删除未使用的组件,并确保他们从受信任的来源接收组件并确保它们是最新版本。

10. 记录和监控不足

许多 Web 应用程序没有采取足够的措施来检测数据泄露。漏洞发生后,平均发现时间约为 200 天。这使攻击者有大量时间在开发人员没有任何响应之前造成破坏。OWASP 建议 Web 开发人员实施日志记录和监视以及事件响应计划,以确保他们了解应用程序遭到的攻击。


有关 OWASP Top 10 的更多技术信息和深入信息,请参阅官方报告