导读:本文我们来看API网关在API安全性中的重要作用,一起探索API网关的优势,缺点,机会与漏洞。
从模块化应用程序切换到微服务时,客户端的行为会和之前,客户端只有一个应用程序入口点的行为相同。
如今,在使用微服务时,客户端必须处理来自微服务架构的全部复杂性,例如聚合来自各种服务的数据,维护多个API节点,为每个服务进行身份验证等。
客户端对微服务的依赖,使得重构服务变得困难。一种直观的方法是在新服务层后隐藏一些服务,并为每个客户端提供定制API。
此聚合器服务层也称为API网关,它是解决这类问题的常用方法。
图1 基于API网关的微服务架构模式
客户的所有请求首先通过API网关。 然后它将请求路由到适当的微服务中。
典型的API网关包括以下类型:
1、安全性(身份验证和潜在授权)
2、管理与限制访问配额
3、缓存(代理和缓存)
4、API组成和处理
5、路由到“内部”API
6、API健康监测(性能监测)
7、版本控制(可以是自动化)
API网关的特点
1、只在一个地方实施
2、简化API源代码本身,因为这些问题是外部化的
3、提供中心化和独特API视图,达到一致性的策略
API网关的缺点
1、可能会有单点故障或瓶颈
2、由于所有API规则都集中在一个地方,可能存在复杂性风险
3、锁定和迁移的风险可能并不简单
4、API增加了漏洞和安全风险
关于API的增长,我们可以查看自2005年以来跟踪公开暴露的API的ProgrammableWeb的统计数据。当时只列出了大约100个API;而如今,有超过10,000个开放 API。
这种增长,表示越来越多地依赖于依赖于用户数据的经济体系。据报道,Salesforce.com通过其API获得了30亿美元年以上收上,Expedia通过API获得年收入20亿美元以上。
公司通过以各种方式计量对API及其背后的资源的访问来产生收入。例如,Twitter,Facebook提供基于CPS广告的API,提供基于报告与数据的定向广告,广告代理商和品牌商支付访问这些API的费用。
API网关在安全性中的角色:身份和访问控制
访问控制是API网关技术的安全加速者,作为各种调控器,可以管理谁可以访问API并建立如何处理数据请求的规则。
访问控制可以延伸到其他策略,包括来自某些来源的API调用时的速率限制,甚至是通过API访问所有或某些资源的支付要求。
API网关的访问控制通常以身份验证机制开始,以便确认调用的来源。 目前,最受欢迎的网关验证协议是OAuth,它充当访问基于Web的资源的代理而不向服务公开密码,基于密钥的身份验证在用于企业时,也有丢失数据的案例,还不能百分之百保证密钥完全保密。
通信安全
网关是通过单个通道路由处理所有API事务的好方法,可以用来评估,转换和保护组织中的消息。当所有流量通过网关路由时,负责安全的同事会更加确信他们能够控制组织的数据。
API网关可以在内部服务引入消息安全性,使内部服务更加安全可靠,因为消息是在加密的服务之间传递的。
忽略正确的身份验证,即使使用传输层加密(TLS),也可能导致问题。例如,在API请求中使用有效的手机号码,任何人都可以获得个人邮件地址和设备标识数据。 OAuth/ OpenIDConnect等行业标准的强身份验证与授权机制加上TLS结合使用会更为重要。
威胁防护
如果没有防护,API网关的集成服务基本上是不安全的。这意味着潜在黑客,恶意软件或任何匿名人都可能会发起一系列攻击,如DDoS或SQL注入等行为。
API是企业与数字世界连接的门户,有一些不怀好意的用户是通过注入命令或表达式来删除、清理、更新、获取对后端管理系统的访问权限。
举个例子,2014年10月,Drupal宣布了一个SQL注入漏洞,该漏洞可以让攻击者访问数据库,代码以及文件目录。这个漏洞非常严重,攻击者可以将所有数据复制出来。2018年8月30号,华住酒店5亿条用户数据被泄露。
还有许多类型的注入威胁,但最常见的是SQL注入,正则表达式注入以及XML注入。
事实上,我们经常看到API在没有威胁防护的情况下上线。
日志记录
API开发者习惯于在成功请求中使用200,对于出错使用404,内部服务器错误使用500,在某些极端情况下,在信息体中有几百个错误消息。
当消息中有包名,类名,框架名,版本,服务器名和SQL查询的形式,能够暴露底层设计或架构体系时,它可能会成为恶意用户的攻击对象。
使用正确的HTTP状态码,精简的错误消息以及错误条件期间没有例外抛出等很好的做法和细节。
API网关可用于将后端错误消息转换为标准化消息,以便所有错误消息看起来类似; 这也消除了暴露后端代码结构。
白名单
考虑到IP地址级别的API流量,应该包含已知的设备,服务器,网络和客户端IP地址列表。当然,根据内部网络规模,这个列表的内容会有所不同。
RESTful服务通常允许多个方法访问URL,用于该实体上的不同操作。例如,GET请求可能读取,而PUT将更新内容,POST将创建新实体,DELETE将删除现有实体。
对于服务来说,对动词可以进行限制非,只有允许的动词才会起作用,而所有其它动词都会返回其它的响应代码(例如,403 Forbidden)。
输入验证
使用松散的输入验证,黑客可以找到系统中的漏洞,找到进入API的方式并破坏系统的完整性。
以下总结一下最常见的输入验证。
消息限制
最好要限制消息尺寸。如果你100%不想收到大邮件(例如,超过20MB),为什么不滤掉它们呢?
SQL注入
SQL注入保护可以阻止可能导致SQL注入攻击的请求。
JSON防护
JavaScript Object Notation(JSON)易受内容类攻击。此类攻击尝试使用特别大的JSON文件压向解析器,最终使服务器崩溃。
XML防护
对XML应用的恶意攻击通常涉及大型递归负载,XPath/XSLT或SQL注入,以及CData压倒解析器并最终导致服务崩溃。
API限速
需要对所有API用户进行身份验证,并记录所有API调用,API需要限制所有API用户的使用率。使用API网关可对可以对任何单个API资源调用数量设置上限,比如按秒,分钟,日或其他相关消耗约束。
一些开源的API网关
以下是一些值得我们一试的产品:
TYK(https://tyk.io/)
WSO2 API Manager(https://wso2.com/api-management/)
KONG COMMUNITY(https://konghq.com/kong-community-edition/)
小结
我们必须理解,安全性是公司首要考虑基础架构中投入的头号关注点。但是,它也是现有API开发者最容易忽视的领域。因为很多公司正在自己构建API作为产品,以部署Web,移动客户端,物联网和其它应用程序,在整个过程中的每一步都须正确保护,API网关是最受欢迎和最有效的解决方案之一。
作者:Guy Levin
编译:罗智
来源:https://dzone.com/articles/the-role-of-api-gateways-in-api-security
领取专属 10元无门槛券
私享最新 技术干货