VISION

网络安全中如何预防常见的 API 漏洞



如今,API 已成为将当今 APP 经济的粘合剂,在 Web 2.0 的浪潮到来之前,开放的 API 甚至源代码主要体现在桌面应用上,越来越多的 Web 应用面向开发者开放了API,同时也正在成为黑客攻击的头号目标。


API 的运行方式与 URL 的运行方式大致相同,用户使用 Web 搜索时,页面展示结果是动态的,以手机银行应用程序为例,API 也以类似的方式运行,它可以获取用户的地理位置、姓名、账号和账户余额,并相应地填充交互页面中的字段,但因为 API 包括所有安全检查,并且通常直接与后端服务通信,所以也更容易被攻击者青睐。


应用程序安全方面一直存在一个问题:输入验证。如果没有适当的功能和安全测试,API 可能会成为一个完美的攻击点。因为 API 受应用程序信任,可以进行高速、海量数据交换。


通过对大量应用程序安全市场客户的调查,并参考开放 Web 应用程序安全项目 ( OWASP ) 后,调查人员汇总了以下三类最常见的 API 漏洞:

第一:资产管理不当

此 API 缺陷是环境隔离和管理不足的结果,允许攻击者访问安全性不足的 API 端点,在之前的网络安全事件中,就有由于开发人员 API 无需编辑即可访问生产数据,进而暴露了客户的系统,属于此类别的漏洞还包括未监控开发 API 中的敏感数据,以及让已弃用的 API 仍处于在线或公开状态。

第二:受损的对象级别授权 Broken Object Level Authorization ( BOLA )

BOLA 的通俗定义是对对象访问请求的验证不充分,它允许攻击者通过重用访问令牌来执行未经授权的操作。Peloton 事件是最近诸多 BOLA 利用中比较有名的一个案例,攻击者可以查看包括标有私人事件在内的,几乎所有用户的个人资料。此类攻击可能影响到从开发到运营,再到营销和公共关系的每个业务组。

第三:无效的用户身份验证

此类漏洞的准确定义是 " 身份验证机制中的实施缺陷 ",允许攻击者冒充合法用户。这里关联两种常见的漏洞利用类型:第一个是由自动化机器人执行的凭证填充。查找有用户身份验证缺陷的 API 是自动攻击的理想目标。此漏洞的更复杂用途是进行侦察,以确定 API 的工作方式。例如我们输入 "a@a.com /" 密码的用户名 / 密码组合,应用程序显示 " 密码无效 ",那么攻击者就会知道用户名是有效的。攻击者将使用此数据点来增加凭证填充(或其他类型的攻击)成功的机会。

API 缺陷影响整个企业,而不仅仅是运维团队、安全团队或业务团队,指指点点从来无法修复问题,修复始于协作,那么如何防止 api 接口被恶意调用或攻击?

1. 图形验证码:

将图形校验码和手机验证码进行绑定,在用户输入手机号码以后,需要输入图形校验码成功后才可以触发短信验证,这样能比较有效的防止恶意攻击。目前大部分应用都是采用这种方式。

2. 限定请求次数:

在服务器端限定同一IP 地址,同一设备,同时间范围内的接口请求次数。比如同一号码重复发送的时间间隔 , 一般为 60 或 120 秒;设置每个 IP 每天最大的发送量;设置单个手机号每天的最大发送量。

3. 流程条件限定:

将手机短信验证放在最后进行,比如需要用户必须注册后,或者用不必须填写了某些条件才能进行短信验证。

4. 归属地是否一致:

服务器端检查用户的 IP 所在地与手机号归属地是否匹配,如果不匹配则提示用户手动操作等。

5. 服务器接口验证:

当用户登录成功后,返回一个由 Token 签名生成的秘钥信息 ( Token 可使用 base64 编码和 md5 加密,可以放在请求的 Header 中 ) ,然后对每次后续请求进行 Token 的封装生成,服务器端在验证是否一致来判断请求是否通过。

(1)常规的方法:用户登陆后生成 token,返回客户端,然后服务器使用 AOP 拦截 controller 方法,校验 token 的有效性,每次 token 是一样的;

(2)用户登陆后生成临时 token,存到服务器,并返回客户端,客户端下次请求时把此 token 传到服务器,验证 token 是否有效,有效就登陆成功,并生成新的 token 返回给客户端,让客户端在下一次请求的时候再传回进行判断,如此重复。 这种方法有性能问题,但也有一个漏洞,如果用户在一次请求后,还未进行下一次请求就已被黑客拦截到登录信息并进行假冒登录,他一样可以登录成功并使用户强制下线,但这种方法已大大减少被假冒登录的机会。

(3)两层 token:一般第一次用账号密码登录服务器会返回两个 token,时效长短不一样,短的时效过了之后,发送时效长的 token 重新获取一个短时效,如果都过期,那么就需要重新登录了。当然更复杂你还可以做三层 token,按照业务分不同 token。

6. 采用 https:

线上的 api 接口开启 https 访问 , 这样做的话别人抓包的难度会提高很多,而且 https 需要秘钥交换,可以在一定程度上鉴别是否为伪造的网络非真人 IP 地址。

7. 服务器端代理请求:

针对于网站,这也是解决跨域的方案之一,采用服务器代理可以有效的防止接口真实地址的暴露。

 


沈阳App定制开发,请信赖唯思科技!