|
|
51CTO旗下网站
|
|
移动端

怎么构建和规划以确保 API 的安全性

没有得到恰当维护的API会让整个企业面对各种风险与要挟。本文向您介绍四种类型的API安全维护办法。

作者:陈峻编译来历:51CTO|2019-06-13 09:00

【wbodog1on.com快译】面对常见的OWASP十大要挟、未经授权的拜访、回绝服务进犯、以及盗取秘要数据等类型的进犯,企业需求运用通用的安全结构,来维护其REST API,并确保杰出的用户运用体会。本文向您介绍四种类型的API安全维护办法。

办理好API安全性

API的安全性涉及到各种端到端的数据维护,它们顺次包括:来自客户端的恳求经由网络抵达服务器/后端,由服务器/后端发送相应的呼应,呼应横跨网络,最终抵达客户端,这一系列的进程。因而,API的安全性可以大致分为如下四种不同的类别,咱们将逐个进行具体评论:

(1)传输中的

  • 维护客户端与API网关之间的动态数据
  • 维护API网关与后端服务之间的动态数据

(2)拜访操控与抵挡回绝服务(DoS)进犯

(3)身份验证与授权:运用OAuth2.0或OpenID Connect,来可靠地辨认最终用户的信息

(4)数据保密与屏蔽个人身份信息(Personally Identifiable Information,PII)

下图描绘了上述分类,以及各种端到端的数据维护办法:

1. 传输中的

关于一切公共且不受维护的API来说,咱们有必要用到TLS。现在跟着硬件的前进,TLS的施行开支简直可以忽略不计了,并且跟着推迟在逐步减小,越来越多的最终用户会处于安全考虑而选用TLS。总的说来,TLS具有如下主要特点:

  • TLS应当在北向(northbound)和南向(southbound)端点一同施行。
  • 应确保运用TLS的最新版别,并对客户端、API网关和方针后端予以支撑。
  • 证书密钥、以及信赖凭证的存储都应该遭到高度维护和。
  • 只需经过授权的用户才干拜访证书密钥、以及信赖凭证。

2. 拜访操控与抵挡回绝服务(DoS)进犯

(1) 网络等级的防护:假如API网关被保管在云端,则需求运用由云服务商所供给的 DDoS防护机制,例如:由Apigee(Google)所运营的Apigee Edge保管云渠道、 GCP(Google云渠道)和AWS(Amazon Web),它们都供给了网络等级的DDoS防护。

(2) 内容交给网络:像Akamai、Neustar和Rackspace之类的CDN,都可以用于缓解那些关于API的DDoS进犯。

(3) “僵尸”检测:现在各大API办理渠道都现已针对僵尸/机器人类型的进犯,推出了检测API流量,辨认各种歹意/非必要恳求,并生成警报/阻挠歹意恳求抵达的API网关服务。例如:Apigee(Google)供给了一种称为“Apigee Sense”的检测服务。它是一种智能数据驱动的API安全产品,它可以经过主动辨认各种可疑的API客户端行为,以供给额定的维护层。一同,办理员也可以在此根底上经过纠正性办法,来确保用户的体会度,以及后端体系的安全性。

(4) 战略履行:咱们应该在坐落API客户端和客户后端之间的API代理上,经过强制施行各种战略,以严厉管控合法用户关于API的拜访。如下战略可以在必定程度上维护API免受歹意bwin的进犯:

  • API速率束缚:经过限速,咱们可以削减很多导致回绝服务的API恳求,并按捺暴力进犯和服务乱用。特别是在API代理服务器上,咱们可以选用如下限速的机制:
  • 依据运用程序或单个API予以限速,以确保每个API或运用程序只能依照固定的恳求数配额,去拜访对应的服务。
  • 依据GET或POST恳求予以限速,当然具体的恳求数设定,可以依据不一同段的GET或POST量而有所不同。

(5) 正则表达式维护:应当依据预界说的正则表达式(如DELETE、UPDATE和EXECUTE)来评价入栈恳求的URI途径、查询参数、包头、表格参数、变量、XML有用负载、以及JSON负载。任何匹配上了预界说表达式的恳求都将被视为要挟,并被当即回绝掉。请参阅OWASP top 10(https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project#OWASP_Top_10_for_2013),以了解具体有关要怎么验证正则表达式的信息。

(6) JSON输入验证:关于PUT/POST/DELETE之类恳求的负载,咱们应履行JSON验证,以经过指定关于各种JSON结构的束缚(如最大深度、目标的最大数量、最长字符串长度的称号、以及数组中所答应的最大元素数等),来最小化或许遭到的进犯面。

(7) XML输入验证:应当对PUT/POSTE/DELETE之类恳求的负载履行XML验证。具体可运用如下办法来依据装备的束缚,以检测XML负载的各类进犯、以及监控针对XML的要挟:

  • 依据XML的架构(.xsd)来验证音讯
  • 依据特定黑名单里的关键字与形式,来评价音讯内容
  • 在剖析音讯之前,检测出已损坏或格局过错的音讯

(8) 验证恳求

  • 验证输入HTTP动词:恰当地对那些答应类动词做出束缚,而关于其他一切动词,则回来相应的呼应代码(如:“403制止过错”)。
  • 验证包头:应当依据API所支撑的功用,显式地验证“内容类型”、“承受”和“内容长度”等包头。此外,还应该履行针对强制性包头(如:授权、以及特定类型的API包头)的验证。
  • 验证入栈内容类型:关于PUT/POST/DELETE之类入栈恳求的内容类型(例如:运用/XML或运用/JSON)、以及内容类型的包头值进行验证。关于短少内容类型的包头、或反常内容类型的包头,应当直接回绝,并回来“406不行承受”的呼应内容。
  • 验证呼应类型:不要简略地将“承受”包头复制到呼应内容类型的包头中。假如“承受”包头中并没有明确地包括答应的类型,应当直接回绝该恳求,并回来“406不行承受”的呼应内容。
  • 处置不支撑的资源:恰当经过束缚资源,只敞开可供调用的资源;而关于其他一切未完成的资源,则应回来“不知道资源”之类相应的呼应代码。

(9) 拜访操控:经过装备战略,只答应来自特定IP地址、域名或区域的恳求。而那些未经过此类条件的恳求,应当被网关直接回绝掉。

3. 身份验证和授权

一般情况下,身份验证和授权是同步发作的。

  • 身份验证常被用于辨认最终用户。
  • 授权则被用于颁布已辨认用户拜访某些资源的权限。

在API领域中,OAuth和OpenID Connect是最为常用的机制。它们经过运用现有的IAM架构,并以交流拜访令牌的办法,来验证用户的身份,然后维护API的各个端点。经过OAuth和OpenID Connect,咱们不需求每次都构建独自的体系,以存储用户名和暗码的办法,来匹配用户可以拜访的API资源。

(1) OpenID与OAuth的前史

OpenID与OAuth的前史

(2) OAuth

OAuth一般选用不透明(OPAQUE)令牌,来完成托付拜访(Delegated Access)的意图。OAuth2.0授权结构使得第三方运用可以取得关于HTTP服务的有限拜访权限。一般,用户不应当为了拜访某些存储在第三方的受维护数据,而在公网上传输自己的暗码。而OAuth刚好可以为用户拜访自己的数据,供给了信赖凭证的安全维护。

OAuth不是一种身份验证协议,而是授权协议。因为身份验证一般发作在颁布拜访令牌之前,因而咱们很简略理解为在承受拜访令牌时,也进行了身份验证。可是,仅凭具有拜访令牌,并不能证明用户的身份。在OAuth中,令牌被规划为对客户端来说是不透明的,客户端仅能从令牌中获取权限信息,而不会涉及到用户名与暗码。

不透明令牌:在许多的具体完成中,OAuth2.0会回来OPAQUE字符串,用以交换被称为拜访令牌的用户凭证,而这些令牌将被进一步用于拜访各种API的资源。不透明令牌并非用来存储用户身份标识与信息,而是指向了某个数据库里的具体数据项。例如:咱们可以用Redis来存储各种键-值(key-value)。而Cassandra之类的NoSQL数据库则十分合适运用内存中的哈希表,依据I/O来查找有用负载。因为用户人物是直接从数据库中被读出的,因而咱们可以经过更改后端的人物,来传递并展示给用户。

(3) OpenID Connect

OpenID Connect选用ID令牌和拜访令牌,来完成用户辨认与托付拜访。OpenID Connect是进行用户身份验证的标准。因为直接构建在OAuth2.0之上,因而在大多数情况下,OpenID Connect是与OAuth架构一同被布置的。在交给形式上,它还为客户端供给OpenID Connect令牌。该身份令牌是一个已签名的JSON Web令牌(JWT),它与惯例的OAuth拜访令牌一同被提交给客户端运用程序。

  • JSON Web令牌:JWT令牌实际上是一个完好的JSON目标。它阅历了base64编码之后,运用对称同享密钥、或公/私钥的办法进行签名。JWT可以包括比如:主题、user_id、令牌颁布时刻、以及过期时刻等信息。经过密钥签名,它可以确保只对具有授权拜访密钥的体系才干生成令牌。不过值得注意的是,体系在对JWT进行签名时,JWT一般不会被(当然,您也可以挑选对其进行)。那么,这就意味着任何具有令牌拜访权限的人都可以读取令牌里的数据。因而,业界的最佳实践是:只把用户标识(如user_id)放在令牌中,而不是个人身份信息(如电子邮件或社会保障号码)。此外,它们应当经过TLS之类的通道来进行传递。
  • JWT束缚:鉴于日常关于用户的禁用、以及增加或删去人物往往需求一段时刻才干同步收效,并且因为令牌存储在客户端,即便咱们在数据库中对其所颁布的JWT用户进行了禁用符号的话,也无法直接让该令牌及时无效。尽管JWT采纳了预界说到期的机制,可是用户依然需求等候到期。明显这会影响到用户的服务架构,特别是那些电商类的运用。

当然,业界也供给了一些变通的办法。例如:您可以运用带有令牌或user_id的黑名单,可是这需求向数据库引进新的认证机制。因而,一种引荐的办法是:经过黑名单以确保每个令牌都带有一个JTI声明(或带有一个存储在数据库中的JWT Id)。因而,只需您期望刊出的令牌数量远小于运用程序中的用户数量,那么操作起来就十分灵敏。

可见,关于那些具有办理员、项目一切者、服务客户经理等多种人物的企业运用来说,切换用户的不同人物并不会对JWT当即收效。例如:办理员修改了某个授权用户的人物,那么只需他不去改写JWT,也就无法得悉该改变。

下面是OpenID Connect的三种完成用例:

  • 出栈方向的Web单一登录(SSO):向企业用户供给关于SaaS运用、以及协作伙伴运用的拜访管控,但并不揭露本企业的用户名与暗码。
  • 入栈方向的Web单一登录:答应交际账号/第三方登录,但无需存储外部用户与暗码。
  • 完成各种本地运用的原生单一登录。

OAuth和OpenID Connect都支撑OAuth2标准所指定的四种授权类型,下图描绘了其间一种授权流程图。API开发人员可以依据手头项目所需的束缚与完成计划,来选用不同的授权类型。

4. 数据保密与屏蔽个人身份信息

众所周知,因为暗码、安全令牌和API密钥包括了不同程度的内部信息,它们不应该出现在URL中,或许被Web服务器的日志所捕获。此外,比如UserID、暗码、帐号、信用卡号码等个人身份信息,也应该处于“被打码”的状况,哪怕是在买卖和审计日志中。

公共API的安全实践

因为独立于任何用户,因而公共API的规划初衷便是为了揭露各种非灵敏、以及只读的数据(例如气候类API),当然也就不用增加任何身份验证与授权环节。不过,我主张您经过如下的方面,来打造可以应对各种要挟与乱用的API:

  • 在IP地址等级上运用速率束缚的相关战略。
  • 运用API密钥验证的办法。经过存储在网关上的办法,确保API的密钥不会被发布给任何客户端。因而,当回绝服务进犯运用无效密钥拜访API、或是在其他战略已无法阻断bwin进犯时,API密钥验证办法可以有用地发挥作用。
  • 选用配额战略(单个或多种配额机制),来完成API的运用束缚。
  • 假如API被用于特定地舆区域的服务器进行通讯,那么就应当在地舆等级上(县/区等)采纳IP地址的挑选。
  • 开发人员应尽量选用一次性注册的办法,并运用自己的API密钥去调用API。

定论

在企业内部、以及企业之间需求集成不同的运用时,开发人员可以经过API来快速且方便地予以完成。不过,假如没有恰当地维护好API,那么就会让整个企业面对各种风险与要挟。因而,咱们需求在开发和施行之前,就对API的安全性进行杰出的构建和规划,然后进步企业的全体安全态势。

原文标题:Ensuring the Security of Your APIs?,作者:Vivek Yadav

【51CTO译稿,协作站点转载请注明原文译者和出处为wbodog1on.com】

【修改引荐】

  1. 影响数据中心正常运转时刻的四种网络进犯
  2. 美国电力设施被DoS进犯的考虑
  3. 网络抗进犯阐明免疫力强
  4. 两款可绕过双要素认证的垂钓进犯东西
  5. 对称与进犯事例剖析
【责任修改:赵宁宁 TEL:(010)68476606】

点赞 0
同享:
咱们都在看
猜你喜爱

订阅专栏+更多

20个局域网建造改造事例

20个局域网建造改造事例

网络建立技巧
共20章 | 捷哥CCIE

405人订阅学习

WOT2019全球人工智能技能峰会

WOT2019全球人工智能技能峰会

通用技能、运用领域、企业赋能三大章节,13大技能专场,60+国内外一线人工智能精英大咖站台,同享人工智能的渠道东西、算法模型、语音视觉等技能主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

Spring Boot 爬虫查找轻松游

Spring Boot 爬虫查找轻松游

全栈式开发之旅
共4章 | 美码师

91人订阅学习

读 书 +更多

通晓ASP.NET 2.0+XML+CSS网络开发混合编程

本书以最新的ASP.NET 2.0为根底,具体论述了当时网络开发的经典架构ASP.NET 2.0+XML+CSS的各个常识点,以及SQL Server 2005的相关常识。全...

订阅51CTO邮刊

点击这儿检查样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客