细说REST 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本身的安全防护的外围,还需要一些其他的安全保障。
【参考】
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安全之概述的更多相关文章
- 细说REST API安全之防止重放攻击
一. 重放攻击概述 百科对重放攻击的描述:https://zh.wikipedia.org/wiki/%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB简而言之,重放攻击的产生是 ...
- 细说REST API
1. REST概述 REST(英文:Representational State Transfer,又称具象状态传输)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一 ...
- Netty源码分析之ByteBuf(一)—ByteBuf中API及类型概述
ByteBuf是Netty中主要的数据容器与操作工具,也是Netty内存管理优化的具体实现,本章我们先从整体上对ByteBuf进行一个概述: AbstractByteBuf是整个ByteBuf的框架类 ...
- 细说 Web API参数绑定和模型绑定
今天跟大家分享下在Asp.NET Web API中Controller是如何解析从客户端传递过来的数据,然后赋值给Controller的参数的,也就是参数绑定和模型绑定. Web API参数绑定就是简 ...
- ArcGIS API for JavaScript 4.2学习笔记[5] 官方API大章节概述与内容转译
内容如上,截图自ESRI官网,连接:ArcGIS API for JavaScript 4.2 [Get Started] 类似于绪论一样的东西,抽取了最需要关注的几个例子.如:加载Map和View, ...
- 细说REST API安全之防止数据篡改
通常可以使用MD5或SHA-1对API参数进行签名,在服务器端通过校验签名结果来验证数据是否被修改. 举个例子:添加用户 地址:http://192.168.0.10/v1/user/add?sign ...
- 细说REST API安全之认证授权
认证授权包含2个方面:(1)访问某个资源时必须携带用户身份信息,如:用户登录时返回用户access_token,访问资源时携带该参数.(2)检查用户是否具备访问当前资源(url或数据)的权限:访问资源 ...
- 细说RESTFul API之版本管理
目录 接口实现版本管理的意义 如何实现接口的版本管理 项目实战 接口实现版本管理的意义 API版本管理的重要性不言而喻,对于API的设计者和使用者而言,版本管理都有着非常重要的意义. 首先,对于API ...
- 细说RESTful API之文档管理
目录 API文档格式 文档管理方式 基于注解实现,代码和文档在一起 Swagger Api2Doc 基于API测试工具生成 Postman rest-client 独立编写文档 RAP DOCleve ...
随机推荐
- HAOI2016 简要题解
「HAOI2016」食物链 题意 现在给你 \(n\) 个物种和 \(m\) 条能量流动关系,求其中的食物链条数. \(1 \leq n \leq 100000, 0 \leq m \leq 2000 ...
- 【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)
[BZOJ5339][TJOI2018]教科书般的亵渎(斯特林数) 题面 BZOJ 洛谷 题解 显然交亵渎的次数是\(m+1\). 那么这题的本质就是让你求\(\sum_{i=1}^n i^{m+1} ...
- cf455C Civilization (并查集)
并查集维护每个联通块的直径和最小的最大深度,每次连得时候连的肯定是最大深度最小的那两个点 #pragma GCC optimize(3) #include<bits/stdc++.h> # ...
- os模块总结
学了忘,忘了学,忘了就来看一下...唯一进步的就是这次学的比上次更快了- - 最常用的几个: os.getcwd() # os.path.abspath(os.path.dirname(__fil ...
- 用Python计算幂的两种方法,非递归和递归法
用Python计算幂的两种方法: #coding:utf-8 #计算幂的两种方法.py #1.常规方法利用函数 #不使用递归计算幂的方法 """ def power(x, ...
- [THUWC2017]在美妙的数学王国中畅游
[THUWC2017]在美妙的数学王国中畅游 e和sin信息不能直接合并 泰勒展开,大于21次太小,认为是0,保留前21次多项式即可 然后就把e,sin ,kx+b都变成多项式了,pushup合并 上 ...
- LOJ#2302 整数
解:发现这苟东西是个3千万位的二进制数......毒瘤吧. 拆位考虑,如果一个地方本来是1然后+1,就会把它和它前面连续的一段1变成0,并把第一个0变成1. 如果本来是0然后-1了,就会把它和它前面连 ...
- [luogu4018][Roy&October之取石子]
题目链接 思路 这个题思路挺巧妙的. 情况一: 首先如果这堆石子的数量是1~5,那么肯定是先手赢.因为先手可以直接拿走这些石子.如果石子数量恰好是6,那么肯定是后手赢.因为先手无论怎样拿也无法直接拿走 ...
- Linux安装 火速入门
一.基本简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. Linux能运行主要的UNIX工具软件.应用程序 ...
- 【非专业前端】Vue UI 之 建立Vuetify工程
先建立一个工程[Webpack] .. ..建立好之后,进入目录,添加vuetify插件 cd vuetify-demo vue add vuetify[会出错] npm install vuetif ...