什么是SQL注入?理解、风险与防范技巧
API 安全检查表:您需要了解的内容
API 已经成为网络犯罪分子最常见的攻击媒介。
为您的用户群创建安全环境的第一步是通过实施一组核心安全措施来涵盖 API 安全的基础知识。
为了帮助您入门,我们在本文中提供了一份清单,其中检查了基本API 安全措施,以保护您免受数据泄露和其他网络威胁。
什么是 API 安全检查表?如何使用它?
API 安全检查表涵盖了一系列关键的安全措施,这些措施需要奠定技术基础来加强您的 API 以抵御网络威胁。
此外,每次发布补丁、更新构建甚至稍微调整源代码时,您都需要运行完整的 API 安全检查。这些检查将帮助您避免在修复旧问题时产生新的漏洞。
因此,组织通常利用自动化 API 安全工具来实现其 API 的全面可见性和覆盖范围(但稍后会详细介绍)。
我们的部分建议基于行业领先的安全指南,例如OWASP API 安全十大指南。其余建议则源自我们与各种规模的组织合作的经验。
第 1 部分:身份验证和授权
身份验证和授权漏洞被广泛认为是最常见的 API 威胁集群之一。
身份验证机制用于验证 API 用户的身份,而授权措施则确保只有授权用户才能根据授予其用户的权限访问 API 的数据和功能。
下面,我们列出了保护您的 API 免受身份验证和授权漏洞影响所需采取的步骤。
身份验证和授权清单:
- 避免基本身份验证
- 实施双因素身份验证
- 实施传输层安全性 (TLS)
1. 避免基本身份验证
虽然基本身份验证简单直接,但由于其固有的安全漏洞,我们不建议您依赖它。相反,考虑使用 API 密钥、OAuth 或 OpenID 作为登录名和密码标准组合的更安全替代品。
如果您必须依赖基本身份验证,则凭证是防止任何未经授权访问 API 的第一道防线。实施强密码策略是一种简单但强大的安全措施,您可以立即实施而无需花费大量成本。
强密码策略的一些最佳实践技巧包括:
2. 实施双因素身份验证
双因素身份验证 (2FA 或 TFA) 是一种用户验证方法,API 消费者需要通过两种不同的方式验证其身份,然后才能访问其帐户。
例如,当用户尝试使用常规用户名和密码登录时,系统还会要求通过电子邮件、电话甚至生物识别技术进行验证。第二层身份验证为黑客增加了更多工作量,有时甚至使他们根本无法获得访问权限。假设登录会触发发送到用户手机的代码。在这种情况下,黑客需要密码和设备的实际所有权才能获得未经授权的访问权限。
实施 2FA即使登录凭证已被泄露,也能防止网络犯罪分子入侵。
3. 强制实施传输层安全性 (TLS)
传输层安全性(TLS) 会加密客户端和服务器之间传输的所有数据,防止未经授权的第三方劫持或修改消息。这可以保护您的 API 免受大量漏洞的攻击,例如窃听攻击(又称中间人攻击)。
TLS 协议确保从客户端发送的所有信息都不会被预期接收者以外的任何人获取。
任何没有 TLS 的 Web 服务都应被视为不安全的,因为它会将密码或信用卡信息等敏感用户数据暴露给网络攻击。
第 2 部分:访问控制
当 API 存在访问控制问题时,攻击者甚至不需要注册就可以造成破坏。
因此,无论他们如何与您的 API 交互,至关重要的是确保他们无法访问可用于实现恶意目标的功能和数据。
为了帮助您入门,请考虑实施以下安全措施,以减轻数据泄露的风险和严重性。
访问控制清单:
- 实施零信任安全模型
- 实施 API 速率限制
- 解决过度数据暴露问题
1. 实施零信任安全模型
传统上,某些用户群体(如管理员或员工)默认在 API 基础设施中获得一定程度的信任。然而,随着黑客每年想出更多方法来突破 API 的防线,这种方法失败了。
作为一种应对措施,零信任安全模型代表了一种范式转变,即从对某些用户群体给予一定程度的无条件信任转变为在 API 治理方面消除信任的概念。换句话说,这种模型意味着除非经过适当的身份验证和授权,否则不应信任任何实体(无论是组织内部还是外部)。
但它并不止于此。由于每个用户都被视为潜在的安全威胁,因此即使通过您的 API 验证后,他们仍会不断受到监控,以防出现任何恶意活动。
除了防止黑客访问您的某个用户帐户而造成损害之外,这种方法还可以防止内部威胁,内部威胁约占数据泄露的60% 。
无论是恶意还是疏忽大意,您的员工都有可能将您的系统暴露给黑客,从而对您的组织造成严重破坏。零信任模型是防止这种情况发生的第一步。
2. 实施 API 速率限制
为每个消费者提供无限制的 API 访问权限无异于酿成灾难,为黑客提供了无数利用 API 的方法 – 尤其是在您扩大活跃用户群时。
API 速率限制是指通过实施与以下相关的某些限制和约束来管理 API 流量的一组措施:
- 特定用户或 IP 地址在特定时间段内可以发送的请求数
- 您的 API 在任意给定时间可以处理的请求数量
- 超出限制后发送新的 API 调用所产生的任何额外费用
- 一旦达到任何速率限制,API 的反应方式 – 从将用户重定向到错误页面到向开发和安全团队触发警报
速率限制的主要目的是保护您的 API 免受 DDoS 和暴力攻击,这两种攻击都需要在短时间内提交大量请求。
它可以防止用户一次发出太多调用或在短时间内发出太多调用,从而导致 API 超载并导致系统崩溃。
作为额外的好处,您为无缝扩展 API 奠定了坚实的基础,提高了应用程序的整体性能和稳定性。
首先,请考虑以下四种速率限制策略,您可以采用这些策略来管理您的资源,而不会有效地干扰用户体验:
- 漏水的桶:一种使用队列实现速率限制的算法 – 先进先出
- 令牌桶:一种使用固定容量桶来实现速率限制的算法
- 固定窗口:基于时间的速率限制算法,根据时间限制处理请求
- 滑动日志:每个请求的时间戳日志
3. 解决过度数据暴露问题
过度数据暴露是一种 OWASP 漏洞,源于向用户提供执行任务所需的主要信息之外的信息。
过度数据泄露的一些常见示例包括将登录凭据留在 URL 字符串中,以及在错误页面中暴露服务器的版本和结构。这些暴露的数据允许黑客利用此类漏洞来了解您的 API 内部的工作方式。
当黑客了解您的 API 的工作原理时,他们就能更有效地找到漏洞,并更有机会实现他们的恶意目标。
例如,如果黑客知道您的服务器在 Apache 上运行,那么这一点就会使他们的工作变得容易得多,因为他们可以继续尝试使用公开已知的 Apache 漏洞来突破您的防线。
为了防止这种情况发生在您身上,请检查 API 中以下元素,其中大多数过度数据暴露漏洞通常发生在这些元素中:
- 错误页面
- URL 字符串
- API 响应
- 传输中的数据
- 静态数据
- 客户端 – 特别是在过滤数据时
为了让 API 对用户更安全,您还应该阻止客户端过滤数据、尽量减少返回响应,并采用 OpenAPI 和 RAML 标准来限制过多数据的暴露。
第 3 部分:输入和输出
任何用户输入都可能被用来绕过您的 API 安全系统,因为它通常用于调用其他代码。
在本节中,我们介绍了必要的安全措施,使黑客更难操纵用户输入来实现他们的恶意目标。
访问控制清单:
- 始终验证用户输入
- 强制执行 HTTP 方法
- 进行 API 模糊输入测试
- 测试 SQL 注入
- 限制参数篡改
1. 始终验证用户输入
我们再强调一下——您应该将任何用户输入视为黑客可能用来未经授权访问您的 API 的功能和数据的工具。
这就是为什么验证所有用户输入至关重要,无论提交输入的用户拥有什么权限 – 无效的用户数据应该触发错误,并且不应该由 API 处理,而有效的输入应该满足开发人员指定的所有标准。
掌握了这种方法,分析 API 使用者可以在哪里以及如何提交用户输入。分析完成后,继续将他们可以使用的字段和数据类型限制到最低限度,而不会损害用户体验或缩减 API 功能。
2. 强制执行 HTTP 方法
强制执行 HTTP 方法是指限制用户可以用来执行某项任务的 HTTP 方法范围的做法。
例如,您的 API 使用者在请求检查其帐户余额时只能使用 GET 方法。在这种情况下,如果开发人员不限制 HTTP 方法,则用户可能使用 POST、PUT 或 PATCH 方法在未经您许可的情况下修改其帐户余额。
这个简单的例子说明了仔细检查用户在执行某项任务时可以使用哪些 HTTP 方法的重要性。
任何与允许的方法不匹配的操作都将导致405 方法不允许响应。
3. 进行 API 模糊输入测试
模糊测试是一种向 API 提供大量通常格式错误的数据以试图暴露 API 中的漏洞的技术。
目标是触发和识别可能被黑客利用或导致系统崩溃的意外 API 响应。
这个简单但功能强大的 API 测试可确保您的 API 的稳定性,并帮助您完善设计以获得更好的性能。
以下是可用于进行 API 模糊测试的工具列表:
- Fuzzapi
- Wapiti
- Wfuzz
4. 测试 SQL 注入
SQL 注入是黑客入侵系统的传统方式之一,是指操纵数据库查询以实现恶意结果(窃取敏感数据或获取编辑权限)的做法。
使用 SQL 注入测试,您可以确定是否可以将数据注入 API,以使其在数据库中运行用户控制的 SQL 查询并可能访问和操纵敏感数据。
您可以使用以下工具或以下工具的组合来测试 SQL 注入:
- SQL映射
- SQLninja
- SQL查询引擎
- APIsec
5.限制参数篡改
参数篡改攻击是指操纵 URL 参数或表单字段数据,以未经授权访问特定用户不应看到的 API 数据和功能。
以下元素是参数篡改攻击最常见的目标。
- Cookies
- 表单字段
- URL 查询字符串
- HTTP 标头
例如,当应用程序依赖隐藏字段来存储状态或技术数据时,黑客可以识别并修改这些字段以进行入侵。
以下是可以实施的一些安全措施,以防止参数篡改攻击:
- 使用正则表达式验证数据
- 从 URL 查询字符串中删除参数
- 为 API 设置格式白名单
- 加密会话 cookie
第 4 部分:API 安全测试
您的 API 的每个特性或功能都是黑客可以利用的潜在漏洞。
成功完成上面列出的三个阶段后,您需要确保您的 API 能够充分响应标准 API 测试。
虽然下面提到的大多数测试并非直接旨在提高 API 安全性,但它们中的每一个都可以指出隐藏的技术问题和漏洞,网络犯罪分子可以利用这些问题和漏洞窃取您的敏感数据并损害您的用户群。
API 安全检查表:
- 进行功能测试
- 进行性能测试
- 执行渗透测试
- 运行漏洞扫描
我们在API 测试流程指南中介绍了整个流程,因此下面我们仅介绍关键思想。
1.功能测试
功能测试的目标是检查 API 的不同元素如何协同和独立工作,以确保系统准确运转。
一些功能测试包括:
- 烟雾测试分析最关键的功能以了解当前构建是否稳定。
- 健全性测试验证了新特性和功能的稳定性。
- 回归测试确认对源代码的任何新更改(从推出安全补丁到实现新功能)都不会对现有功能产生负面影响或造成漏洞
- 集成测试分析不同的功能模块如何协同工作。
- 可用性测试有助于发现任何影响用户体验 (UX) 的用户面临的技术问题。
2.性能测试
性能测试分析当 API 流量大量激增导致系统超载时,API 在压力下的工作情况。
- 负载和压力测试可确保 API 能够承受大量 API 流量而不会导致系统崩溃。
- 容量和容量测试试图确定 API 的性能限制,分析系统在保持高性能水平的同时可以处理的请求数量。
- 可靠性测试确定事件发生后 API 需要多长时间才能恢复,以及是否可以自主处理而无需 API 开发人员的参与。
3.渗透测试和漏洞扫描
最后,遵循整个清单后,您需要使用两种最常见的 API 安全测试方法来测试整个 API:渗透测试和漏洞扫描。
渗透测试(也称为道德黑客)模拟 API 攻击以发现黑客可以利用的漏洞 – 而漏洞扫描使用行业标准指南(例如OWASP Top 10 API 安全列表)针对最流行的 API 安全漏洞分析您的 API。
最后警告:没有检查表足以保证你的 API 安全
尽管该清单详尽地涵盖了各种 API 漏洞,但它远不足以保护您免受黑客不断发展的技术和方法的攻击。
这主要因为任何 API 都是一个复杂的系统,其中几乎每个元素都可能以某种方式被黑客滥用。
此外,无论您的清单实际上有多详细,它都无法有效解决最危险类型的 API 漏洞——业务逻辑缺陷。
当您的用户可以滥用 API 的合法功能来窃取您的数据或执行他们不允许执行的操作时,并不需要黑客来造成损害 – 每个 API 消费者都会成为真正的威胁。
那么,世界上一些最大的科技公司是如何解决这个问题的呢?幸运的是,我们知道答案。
手动安全测试需要花费大量的时间和资源 – 而且每年只能进行几次。