大家好,我是阿萨。昨天学习了API的常见风险。常见API安全风险。今天来给大家讲讲化解这些风险的具体步骤和措施。
以下12个最佳实践可以帮助扩展和提升组织api的安全性:
1. 验证和授权
为了控制对API资源的访问,必须仔细全面地识别所有相关用户和设备。这通常要求客户端应用程序在API调用中包含一个令牌,以便服务可以验证客户端。
使用OAuth 2.0、OpenID Connect和JSON web令牌等标准来验证API流量,并定义访问控制规则或授予类型,以确定哪些用户、组和角色可以访问特定的API资源。
始终遵循POLP。如果用户只是需要阅读博客或发表评论,那么这些是应该分配的唯一权限。
2. 实现访问控制
希望第三方通过api访问内部数据和系统的组织必须引入和测试控制来管理这种访问:何人、内容和时间,以及对数据访问、创建、更新和删除的检查——零信任安全模型。
将API置于防火墙、web应用防火墙或API网关之后——通过安全协议(如HTTPS)访问——以提供基线保护,例如扫描基于签名的威胁和基于注入的攻击。
设计良好的api还可以应用速率限制和地理速度检查,以及作为地理围栏和I/O内容验证和消毒等策略的执行点。Geo-velocity检查根据先前和当前登录尝试之间所需的移动速度确定访问,从而提供基于上下文的身份验证。
所有这些检查都由作为API应用程序一部分的中间件代码应用。中间件在传递请求之前处理请求。
3.加密请求和响应
所有网络流量都应该加密——尤其是API请求和响应,因为它们可能包含敏感凭证和数据。所有api都应该使用并要求HTTPS。在可能的情况下启用HTTP严格传输安全比将HTTP流量重定向到HTTPS更好,因为API客户端可能不会像预期的那样表现。
4. 验证数据
永远不要假设API数据已经被正确地清理或验证。在服务器端实现自己的数据清理和验证例程,以防止标准注入缺陷和跨站请求伪造攻击。诸如Postman和Chrome DevTools之类的调试工具可以帮助检查API的数据流并跟踪错误和异常。
5. 评估API风险
另一个重要的API安全性最佳实践是对现有注册表中的所有API执行风险评估。建立措施,以确保它们符合安全策略,并且不容易受到已知风险的影响。开放Web应用程序安全项目的“API安全十大”漏洞列表是跟踪现有攻击和恶意软件的一个很好的资源。
风险评估应确定所有系统和数据受到影响,如果一个API应该受到损害,然后概述一个治疗计划和必要的控制,以减少任何风险到可接受的水平。
文档审查日期并在出现新威胁或API被修改时重复评估。在任何后续代码更改之前,都应该检查此文档,以确保安全性和数据处理需求不会受到损害。
6. 只分享必要的信息
API响应通常包括整个数据记录,而不仅仅是相关字段,依赖客户端应用程序过滤用户看到的内容。这就是惰性编程,它不仅减慢了响应时间,而且还为攻击者提供了关于API及其访问的资源的额外信息。
响应应该包含满足请求所需的最少信息。例如,如果要求员工的年龄,那么出生日期也不应该返回。
7. 选择自己的Web服务API
通过api访问web服务有两个主要选项:简单对象访问协议(SOAP),一种通信协议;以及具象状态传输API (REST API或RESTful API),一套用于数据传输的体系结构原则。它们使用不同的格式和语义,需要不同的策略来确保健壮的安全性。
SOAP安全性使用XML消息本身中的数字签名和加密部分应用于消息级别。REST严重依赖于与API的通用资源标识符(如HTTP标记和URL路径)相关的访问控制规则。
如果您主要关心的是标准化和安全性,请使用SOAP。虽然这两个选项都支持安全套接字层/传输层安全(SSL/TLS),但SOAP还支持Web服务安全、通过中介进行身份验证(而不仅仅是SSL/TLS提供的点对点验证)以及内置的错误处理。但是,SOAP将应用程序逻辑的组件公开为服务而不是数据,这可能会使SOAP的实现变得复杂,并且可能需要对应用程序进行重构。
与此同时,REST与各种数据输出类型兼容——包括JSON、逗号分隔值和HTTP——而SOAP只能处理XML和HTTP。此外,REST仅访问数据,因此它是访问web服务的一种更简单的方式。由于这些原因,组织通常更喜欢使用REST进行web开发项目。但是,数据交换、部署和与客户端的交互必须内置安全性。
8. 在API注册表中记录API
没人能保护自己不知道的东西。因此,必须在注册表中记录所有api,以定义其名称、用途、有效负载、使用情况、访问、运行日期、退役日期和所有者等特征。这将避免影子或竖井api被遗忘,从未记录或在主项目之外开发,可能是通过合并、收购或测试或弃用版本。
记录要记录的信息的详细信息——例如何人、内容和时间——这将有助于满足合规性和审计要求,并在发生安全事件时帮助取证分析。
对于希望将这些api合并到自己的项目中的第三方开发人员来说,良好的文档尤为重要。API注册表应该包含到文档或手册的链接,这些文档或手册包含所有技术API需求,包括函数、类、返回类型、参数和集成过程。
9. 定期进行安全测试
除了在开发过程中彻底测试api之外,安全团队还需要定期检查保护活动api的安全控制,以确保它们按预期运行,并按照文档的要求运行。
事件响应团队应该创建一个计划来处理威胁检测和其他安全控制所产生的指示API攻击的警报。
10. 隐藏你的API密钥
API密钥用于识别和验证对调用API的应用程序或站点的访问。它们还可以阻止或限制对API的调用,并识别使用模式。
API密钥不如身份验证令牌安全,需要仔细管理。避免将API键直接嵌入到它们的代码中或应用程序源代码树中的文件中,在这些地方它们可能会意外地暴露出来。相反,应该将它们存储在环境变量中或应用程序源树之外的文件中。更好的方法是使用秘密管理服务,它可以保护和管理应用程序的API密钥。
即使采取了这些措施,也要始终删除不需要的密钥,以最大限度地减少受到攻击的风险,并定期重新生成密钥——特别是在您怀疑已发生漏洞时。
11. 在API监控和威胁检测中增加AI
支持ai的行为分析可以极大地提高API的整体安全性。它对正常的API流量进行基准测试,并提供用户如何访问和使用API的可见性,这可以帮助开发人员为上下文安全检查微调阈值设置。威胁检测工具可以使用这些信息来查找异常行为,以标记或阻止滥用或潜在的攻击。
攻击者必须反复探测API以找到他们可以利用的漏洞或逻辑,因此实时监控对于攻击检测和响应至关重要。这种方法不需要预定义的策略、规则或攻击签名,因此它减少了不断更新以阻止新的和不断发展的攻击的需要。
12. 理解安全API使用的全部范围
API安全性还包括它使用的第三方API。在构建通过api处理第三方数据的应用程序或服务之前,必须充分理解它们的工作原理以及集成它们的正确方法。
全面阅读API文档,注意API函数和例程的过程和安全方面,例如所需的身份验证、调用过程、数据格式和任何可能出现的错误消息。一种很好的方法是构建一个威胁模型,以帮助您了解攻击面,识别潜在的安全问题,并从一开始就纳入适当的安全缓解措施。
API为组织创造了无数机会来改进和交付服务、吸引客户、提高生产力和利润——但前提是您安全地实现了这些API。