目前许多前后端应用都采取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本身的安全防护的外围,还需要一些其他的安全保障。

【参考】
http://www.jianshu.com/p/d7c52d113a68 浅谈API安全设计
http://www.jianshu.com/p/c6518a8f4040 API接口安全性设计
http://blog.nsfocus.net/rest-api-design-safety/ REST API 安全设计指南

细说REST API安全之概述的更多相关文章

  1. 细说REST API安全之防止重放攻击

    一. 重放攻击概述 百科对重放攻击的描述:https://zh.wikipedia.org/wiki/%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB简而言之,重放攻击的产生是 ...

  2. 细说REST API

    1. REST概述 REST(英文:Representational State Transfer,又称具象状态传输)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一 ...

  3. Netty源码分析之ByteBuf(一)—ByteBuf中API及类型概述

    ByteBuf是Netty中主要的数据容器与操作工具,也是Netty内存管理优化的具体实现,本章我们先从整体上对ByteBuf进行一个概述: AbstractByteBuf是整个ByteBuf的框架类 ...

  4. 细说 Web API参数绑定和模型绑定

    今天跟大家分享下在Asp.NET Web API中Controller是如何解析从客户端传递过来的数据,然后赋值给Controller的参数的,也就是参数绑定和模型绑定. Web API参数绑定就是简 ...

  5. ArcGIS API for JavaScript 4.2学习笔记[5] 官方API大章节概述与内容转译

    内容如上,截图自ESRI官网,连接:ArcGIS API for JavaScript 4.2 [Get Started] 类似于绪论一样的东西,抽取了最需要关注的几个例子.如:加载Map和View, ...

  6. 细说REST API安全之防止数据篡改

    通常可以使用MD5或SHA-1对API参数进行签名,在服务器端通过校验签名结果来验证数据是否被修改. 举个例子:添加用户 地址:http://192.168.0.10/v1/user/add?sign ...

  7. 细说REST API安全之认证授权

    认证授权包含2个方面:(1)访问某个资源时必须携带用户身份信息,如:用户登录时返回用户access_token,访问资源时携带该参数.(2)检查用户是否具备访问当前资源(url或数据)的权限:访问资源 ...

  8. 细说RESTFul API之版本管理

    目录 接口实现版本管理的意义 如何实现接口的版本管理 项目实战 接口实现版本管理的意义 API版本管理的重要性不言而喻,对于API的设计者和使用者而言,版本管理都有着非常重要的意义. 首先,对于API ...

  9. 细说RESTful API之文档管理

    目录 API文档格式 文档管理方式 基于注解实现,代码和文档在一起 Swagger Api2Doc 基于API测试工具生成 Postman rest-client 独立编写文档 RAP DOCleve ...

随机推荐

  1. 【CF429E】Points and Segments(欧拉回路)

    [CF429E]Points and Segments(欧拉回路) 题面 CF 洛谷 题解 欧拉回路有这样一个性质,如果把所有点在平面内排成一行,路径看成区间的覆盖,那么每个点被从左往右的覆盖次数等于 ...

  2. 前端JS Excel导出

    本文转载自:https://blog.csdn.net/plmzaqokn11/article/details/73604705 下载table2Excel插件 <input type=&quo ...

  3. poj2259 Team Queue

    吼哇,又是水题. 我本来准备开1010个queue的,但是STL容器里好像只有vector滋磁开组,于是只好数组模拟... 然后模拟过了...... #include <cstdio> # ...

  4. 洛谷T31039 九尾狐吃棉花糖

    小伙伴出的题. 一眼看出是状压DP裸题.回忆poj2288 islands and bridges,然后就很好写了. 啪啪啪打了个状压DP出来(晚上寝室写的,其实是记忆化搜索),发现sum总是INF ...

  5. 第十三节、SURF特征提取算法

    上一节我们已经介绍了SIFT算法,SIFT算法对旋转.尺度缩放.亮度变化等保持不变性,对视角变换.仿射变化.噪声也保持一定程度的稳定性,是一种非常优秀的局部特征描述算法.但是其实时性相对不高. SUR ...

  6. java的抽象方法

    抽象类所起的功能就像定义模板的功能,子类必须继承抽象类,因此不能用final修饰 http://blog.csdn.net/wei_zhi/article/details/52736350 抽象类的函 ...

  7. Android studio自带的sample例子

    1. 直接查看Github上面的Sample Sample in GitHub:  点击打开链接 2. FQ下载(个人倾向于下载) 需要FQ工具 goagent goagent在windows下的安装 ...

  8. java 学习:在java中启动其他应用,由jenkins想到的

    在jenkins的实践中遇到了一个问题: 我的项目依赖其他第三方应用的地方比较多,而且会占用多个端口,如何处理端口和启动/关闭第三方应用成了难题. 初级解决方案:在服务端上面写一堆bat文件,,,,_ ...

  9. ngnix FastCGI解析漏洞

    漏洞描述: Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME.当访问http://192.168.1.103/phpin ...

  10. angular 中如果表单有相同的name一般会出现如下错误

    Unhandled Promise rejection Cannot assign to a reference or variable