API安全性是网络安全的重中之重。诸如云原生应用程序,无服务器,微服务,单页面应用程序以及移动和物联网设备等新兴趋势和技术已致使API的激增。应用程序组件再也不是在单个进程中在一台机器上彼此通讯的内部对象,而是经过网络相互通讯的API。
这显着增长了攻击面。此外,经过发现和攻击后端API,攻击者一般能够绕过前端控件,直接访问敏感数据和关键内部组件。这致使了API攻击的激增。每周,新闻中都会报道新的API漏洞。OWASP如今有专门针对API的十大漏洞的单独列表。而Gartner估计,到2022,API都将成为头号攻击向量。
为了解决这个问题,公司愈来愈多地转向积极安全 模式。他们定义了预期的API行为,确保定义足够严格和详细,以使其有意义,测试实现以符合该定义,而后在使用API期间强制执行该定义。API预期范围以外的任何调用以及API预期返回范围以外的任何响应都将被自动拒绝。
与传统应用程序不一样,API实际上具备一种在标准的机器可读模型中定义其预期输入和输出的方法。具体来讲,对于当今最流行的API类型(REST API),此合同格式为OpenAPI。它最初是为文档目的而建立的Swagger标准,后来被Linux基金会下的OpenAPI Initiative采纳。当今市场上的大多数开发和API工具要么本机使用OpenAPI,要么以该格式支持导入和导出。
让咱们看一下OpenAPI规范的特定部分及其在安全性中的做用。
注意: 咱们将在此处的示例中使用YAML格式和OpenAPI版本3,可是JSON与该格式同样好,而且能够在版本2(也称为Swagger)中找到相似的方式来指定API行为。前端
API路径是API定义中最基本的部分。它们与服务器URL和基本路径一块儿,记录了API客户端应调用的URL:
在OpenAPI规范中,路径是必填的。完整记录服务器公开的全部API和API路径可防止攻击者发起路径遍历攻击或查找影子端点:暂存,非生产性和旧式端点。数据库
请求和响应均可能在正文中包含数据。REST API一般使用JSON做为交换数据的格式。尽管不是强制性的,但仍是强烈建议您严格描述此类请求和响应的模式:
咱们还应该将有效负载的类型明确指定为对象,并将其additionalProperties值设置为false。这些阻止将其余属性插入到调用中。
这些额外的步骤可防止攻击者将其得到的全部属性盲目地保存到数据库,并没有意中覆盖敏感字段时,进行批量分配攻击。最近,流行的容器注册表系统Harbor发生了这种API漏洞,攻击者能够经过在API调用中仅包含”has_admin_role”:true来更改本身的我的资料详细信息,从而使本身成为管理员。后端
身份验证很重要,OpenAPI能够定义您的API应该具备的安全方案(基本,承载,API密钥,OAuth2,OpenID Connect等):
而后将其应用于任何级别(整个API或仅特定操做):
您也能够在上面的示例中看到,该标准本机支持范围。
不用说,身份验证和受权对于API安全性极为重要。如此多的API被黑客入侵的缘由是: 它们原本是“内部的”,而且开发人员从未想到攻击者会找到进入网络并调用它们的方法。身份验证的设计没有遵循安全规范。安全
在这个时代,应该始终加密流量并使用HTTPS而不是HTTP。
HTTP的使用会使得网站容易受到中间人攻击,在这种中间人攻击中,流量将被拦截,而且攻击者冒充合法的API使用者。服务器
咱们将在这里简要介绍的另外一个方面是工具支持。本文并非对工具的评论,所以咱们仅提供一些指导。您能够自行选择如Eolinker安全网关或者其余的安全工具使用。
API安全规范只有在实际使用它的状况下才有用,而且根据生命周期的阶段,其用法也有所不一样。
API防火墙和API网关能够基于合同(在外部(南北)和内部(东西方)级别)实施“积极安全性”,以下图所示:网络
本文整理了大部分可能会出现的API攻击方式,可是也请意识到,OpenAPI仍然是一个不断发展的标准,而且它对API安全性的覆盖也在不断发展。
幸运的是,OpenAPI容许您使用本身的自定义对象和属性对其进行扩展。您能够本身执行此操做,也可使用您选择的API安全网关或API管理工具提供的自定义扩展名进行操做。随着API攻击的增长,确保您受到保护的最有效方法是使用“积极安全性”模型,在整个API生命周期中使用定义明确,通过测试和强制执行的规范。
翻译:Eolinker——国内3万+企业在用的API管理和网关工具微服务