细说RESTful API安全之概述

目前许多前后端应用都采取REST架构风格,前端应用和后端服务通过API进行数据交换。 通过REST API在网络中进行数据交换时很容易被网络抓包,然后进行恶意批量调用,最终导致后端服务不堪负重而影响正常业务,甚至通过数据篡改制造大量垃圾数据。 鉴于此,REST API的安全就变得非常重要!不考虑任何REST API安全防护的系统可能会受到如下攻击:

   ▇ 重放攻击,DoS/DDoS攻击,导致系统被大量恶意请求拖垮,影响正常业务
   ▇ 数据篡改,产生大量的垃圾数据
   ▇ 敏感数据被泄露
   ▇ APP被仿制

所以,在设计REST API时需要解决授权访问,敏感数据泄露,数据篡改,重放攻击,DoS/DDoS攻击等一系列安全问题。

1. 认证授权

认证授权包含2个方面: (1)访问某个资源时必须携带用户身份信息,如:用户登录时返回用户access_token,访问资源时携带该参数。 (2)验证用户是否具备访问某些资源的权限:访问资源时判断用户权限。

2. 防止敏感数据泄露 通常,敏感数据指用户名和密码信息,所谓敏感数据泄露包含2个方面: (1)密码信息不能以明文方式存储在数据库中,容易被恶意窃取。 (2)用户名和密码参数不能以明文方式在网络上进行传递(对参数进行编码或者使用ssl加密传输)。

3. 防止数据篡改 通常可以使用MD5加密的方式对API参数进行签名,在服务器端通过校验签名结果来验证数据是否被修改。

4. 防止重放攻击,DoS/DDoS攻击 可以通过时间戳,请求序列号等方式在一定程度上防止大规模的重放攻击。 实现方式不同,效率和难易程度上略有差异,需要根据业务系统实际需求选择合适的方式。

5. 其他注意事项 - API只曝露指定方法,如:POST,GET,PUT,DELETE。 - 参数校验,如:根据HTTP消息头中的Accept字段检查是否存在必要的参数信息,甚至可以验证参数格式是否正确等。 - 尽量使用SSL - 客户端JavaScript代码混淆(注:JavaScript代码混淆不能起到加密的作用,而是需要尽量将用户名和密码加密结果随机化,如:加入加密随机盐值等)

总结: 安全是相对的,是否需要严格的API安全性设计需要根据应用本身的需求而定。 安全保护也是多层次的,往往在API本身的安全防护的外围,还需要一些其他的安全保障。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券