什么是 OWASP 安全项目
开放 Web 应用程序安全项目是致力于 Web 应用程序安全的国际非营利组织。OWASP 核心原则之一是,他们的所有资料都免费提供并可以在其网站上轻松访问,这使得任何人都能够改善自己的 Web 应用程序安全性。
注入
当不被信任的数据通过表单输入或其它一些提交到 Web 应用程序数据发送到代码解释器时,就会发生注入攻击。
如攻击者可能向本应填写纯文本用户名的表单输入 SQL 数据库代码。
如果该表单输入未得到正确保护,则将导致执行该 SQL 代码。这称为 SQL 注入攻击。
可通过验证或清除用户提交的数据来防止注入攻击。
验证表示拒绝看似可疑数据,而清理指清除数据中可疑的部分。
此外,数据库管理员可以设置控件以最大程度地减少注入攻击可能接触的信息量。
身份验证失效
攻击者可通过身份验证系统中的漏洞访问用户帐户,甚至可以使用管理员帐户来破坏整个系统。
例如,攻击者可以获取一个包含在数据泄露中获得的数千个已知用户名与密码组合的列表。
并使用脚本尝试在登录系统尝试所有这些组合,以查看是否有任何有效组合。
一些防护身份验证漏洞的策略要求双要素身份验证以及使用限制或延迟重复的登录尝试。
敏感数据暴露
如果 Web 应用程序不保护财务数据和密码等敏感数据,则攻击者可访问这些数据并将其用于恶意目的。
窃取敏感信息的一种热门方法是使用在途攻击。
通过加密所有敏感数据并禁用任何敏感信息的缓存,可最大程度地降低数据暴露风险。
此外,Web 应用程序开发人员应注意确保避免不必要地存储任何敏感数据。
缓存是一种临时存储数据以供重用的做法。
例如,网络浏览器通常会缓存网页,这样一来,如用户在特定时间段内重新访问这些页面,浏览器就不必从 Web 获取页面。
外部实体
这是对解析 XML 输入 Web 应用程序的攻击。
此输入可引用外部实体,以尝试利用解析器中的漏洞。在此,外部实体是指存储单元,如硬盘驱动器。
攻击可欺骗 XML 解析器将数据发送到未经授权的外部实体,然后后者可将敏感数据直接传递给攻击者。
防止 XEE 攻击的最佳方法是让 Web 应用程序接受不太复杂的数据类型,如 JSON,或者至少给 XML 解析器打补丁并禁止在 XML 应用程序中使用外部实体。
XML 全称可扩展标记语言,是种旨在同时实现人类可读和机器可读的标记语言。
由于其复杂性和安全性漏洞,许多 Web 应用程序现在已经逐步淘汰了这种语言。
JavaScript 对象表示法是一种简单的、人类可读的表示法,通常用于通过网络传输数据。
尽管 JSON 最初是为 JavaScript 创建,但它不受语言限制,并且可以由许多不同的编程语言解释。
访问控制中断
访问控制是指控制对信息或功能的访问权限的系统。
损坏的访问控制使攻击者可以绕过授权并执行任务,像他们是管理员等特权用户一样。
例如,Web 应用程序可能允许用户仅通过更改 URL 的一部分即可更改他们登录的帐户,无需任何其它验证。
通过确保 Web 应用程序使用授权令牌并对其设置严格控制,可确保访问控制的安全。
许多服务在用户登录时都会发布授权令牌。用户发出每个特权请求都需出示授权令牌。
这是确保用户身份与声称相符的安全方法,而无需他们不断的输入登录凭据。
安全配置错误
安全配置错误是列表上最常见的漏洞,通常是使用默认配置或显示过多详细错误结果。例如,一个应用程序可能在向用户显示错误时描述得过于详尽,以致于揭示出应用程序中的漏洞。
这种情况可通过删除代码中任何未使用的功能并确保错误消息更加笼统来防护。
XSS 跨站点脚本
跨站点脚本漏洞在 Web 应用程序允许用户将自定义代码添加到 URL 路径或其他用户可看到的网站上时发生。
利用漏洞,可在受害者的浏览器上运行恶意的 JavaScript 代码。
例如,攻击者可向受害者发送似乎来自受信任银行的电子邮件,并随附指向该银行网站链接。
链接可能在 URL 的末尾标记一些恶意 JavaScript 代码。
如银行的站点没有得到适当的跨站点脚本保护,则当受害者单击链接时,该恶意代码将在受害者的 Web 浏览器中运行。
跨站点脚本的缓解策略包括对不受信任的 HTTP 请求转义以及验证和、或清除用户生成的内容。
不安全的反序列化
这种威胁目标是各种经常对数据进行序列化和反序列化的 Web 应用程序。
序列化意味着从应用程序代码中获取对象,并将其转换为可用于其它目的的格式,例如将数据存储到磁盘或对其进行流传输。
反序列化正好相反:将序列化的数据转回应用程序可以使用的对象。序列化就像在搬家前将家具打包到箱子里,而反序列化就像在搬家后拆开箱子并组装家具。
不安全的反序列化攻击就像搬家公司在拆箱前篡改箱子中的物品。
不安全的反序列化漏洞利用是不可信来源的数据反序列化的结果,并可能导致严重的后果,例如 DDoS 攻击和远程代码执行攻击。
尽管可采取措施尝试检出攻击者,如监视反序列化和实施类型检查,但防止不安全的反序列化攻击的唯一肯定有效方法是禁止来自不受信任来源的数据反序列化。
使用具有已知漏洞组件
许多现代 Web 开发人员在其 Web 应用程序中使用库和框架之类的组件。
这些组件是可帮助开发人员避免多余工作并提供所需功能的软件。
一些攻击者会在这些组件中寻找漏洞,然后利用这些漏洞组织攻击。
一些较为热门组件在数十万个网站上使用。攻击者如在其中一个组件中发现安全漏洞,就可能使数十万个站点易受攻击。
组件开发人员通常会提供安全补丁和更新程序修补已知漏洞,但 Web 应用程序开发人员并不总是在其应用程序上运行组件修补版本或最新版本。
为最大程度地降低运行具有已知漏洞的组件的风险,开发人员应从项目中删除未使用组件,并确保他们从受信任的来源接收组件并确保它们是最新版本。
记录监控不足
许多 Web 应用程序没有采取足够措施来检测数据泄露。
漏洞发生后平均发现的时间约为 200 天。
这使攻击者有大量时间在开发人员没任何响应之前造成破坏。
OWASP 建议 Web 开发人员实施日志记录和监视及事件响应计划,以确保他们了解应用程序遭到的攻击。