API 安全最佳实践
API 的本质是用来使用的。即使所有用户都是内部人员,安全问题仍然可能存在。为了解决这个问题,我们整理了一份最佳实践列表,供您在保护和锁定 API 或 Web 服务时参考。
使用 HTTPS
Web 已经超越了标准 HTTP。浏览器供应商会标记未使用安全层的 URL,现在是时候对您的 API 采取同样的措施了。HTTPS 使用传输层安全性 (TLS) 来加密流量。这意味着客户端和服务器之间的通信是加密的。对于您的 API 而言,这意味着从 API 发送的内容不会受到第三方攻击,但更重要的是,这意味着访问凭据是安全的。
认证
说到访问凭证,避免 API 被意外使用的最直接方法是确保正确的身份验证。身份验证是指允许或阻止访问 API 的方式。即使是免费使用的公开 API,也应该考虑采用身份验证策略。这不仅能限制或移除滥用 API 的用户,还能保护用户,让他们能够在需要时重置凭证。您可以在我们关于三种最常见身份验证方法的文章中了解更多关于 API 身份验证类型的信息。
授权
身份验证的兄弟是授权。身份验证关注的是 API 的用户是谁,而授权则关注的是他们能够访问哪些内容。例如,免费计划用户可能只能访问完整 API 的子集。对于社交登录等集成,用户授权您的应用从社交平台读取他们的个人资料数据。
安全端点和资源(对象级授权)
通过授权来保护一个或一组端点是很常见的。但更具前瞻性的方法是同时保护各个资源。这可以防止配置错误的端点级授权触及您的数据。这也意味着端点本身不受用户类型的限制,而是由资源控制哪些人可以查看哪些人不能查看。
速率限制
当我们思考安全时,我们常常会想到不适当的访问。将安全视为资源管理也很有用。速率限制是一种限制 API 使用量的技术。它可以在经济上保护您的资源,同时还能确保您的服务器不会因一次性大量请求而过载。许多速率限制方法都是基于时间的。它们可以设置为按计费周期处理总体使用情况,也可以使用“突发”方法来限制大量请求的涌入。如果您曾经见过429 HTTP 状态代码,那么您就经历过速率限制。
验证并清理输入
Web 应用程序最古老的攻击点之一是输入字段。我们访问数据的方式可能已经改变,但验证任何用户输入的需求却始终如一。客户端验证有助于防止错误并提升用户体验,但您的 API 也需要在处理所有输入之前对其进行验证和过滤。过滤会从请求中去除恶意或无效代码。验证可确保数据符合资源所需的必要条件。这些条件可能是类型和形状,甚至是密码结构等因素。
只公开需要的内容
走捷径,直接将数据模型映射到端点可能很诱人。这不仅会提供过于冗长的响应并增加带宽使用量,还会暴露用户不需要访问的数据。例如,假设有一个/user
返回用户个人资料的端点。它可能需要一些关于用户的基本信息,但不需要用户的密码或访问级别。
配置错误消息
除了对输入 API 的数据进行安全防护外,您还需要对输出的信息进行安全防护。错误消息在帮助用户了解问题发生方面发挥着关键作用,但请确保不要泄露任何敏感数据。向最终用户提供有关内部代码结构的详细信息可能会为攻击者提供可趁之机。请确保配置错误消息,使其提供足够的信息来帮助用户进行调试和报告问题,但不要过多地暴露应用程序的内部工作原理或敏感数据。
不要泄露敏感信息
为了更好地保护敏感数据,请确保不要在JSON Web Token (JWT) 或 Cookie 中暴露任何信息。JWT 的主体部分看似安全,但实际上很容易被破解。因此,您应避免在 URL 中包含可能用于访问应用程序的用户信息。同样的建议也适用于 URL。确保查询字符串不会泄露敏感信息。
评估你的依赖关系
我们不再孤立地进行开发。现在,每个代码库中很大一部分都包含库、中间件以及来自外部的各种依赖项。虽然通常可以安全地假设流行的软件包是“久经考验的”,但这并不意味着它们就完全没有漏洞。务必评估您的依赖项。它们维护得当吗?您使用的是最新版本吗?是否存在问题历史记录?或许更重要的是:您真的需要一个库来完成您正在做的事情吗?
允许用户跟踪和重置身份验证密钥
提高 API 安全性的另一个方法是允许用户重置凭证并监控自己的使用情况。一个常见的错误是不允许用户重置 API 密钥。如果 API 的使用者意外泄露了密钥,或者密钥被恶意窃取,这个问题就会直接影响到 API。因此,应该为他们创建一种管理访问权限的方法。
在您的服务中实现身份验证标准化
我们已经看到像谷歌、微软和亚马逊这样的 API 巨头对其 API 的授权和身份验证流程进行了标准化。不妨考虑采用一种集中式的方法来实现这一点,例如使用API 网关或专用入口点来处理身份验证请求。
遵循 OWASP 的标准指南
除了这些最佳实践之外,还可以考虑采纳开放 Web 应用程序安全项目(OWASP) 的建议。他们提供了针对特定平台的指南,以及即将发布的 API 指南《API 安全十大指南》。除了在代码级别保护 API 之外,您还需要确保服务器和基础架构配置正确,以避免未经授权的访问。
保护你的 API 免受其他 API 的侵害
如果您的 API 依赖于第三方 API,请考虑实施类似Bearer 的解决方案。集成 Bearer Agent 后,您可以跟踪、观察、响应 API 性能异常的情况,并在出现问题时收到警报。立即试用Bearer ,并通过@BearerSH与我们联系。
文章来源:https://dev.to/bearer/api-security-best-practices-3gjl