文档章节

接口服务数据被劫包,如何防止数据恶意提交(道乐)

o
 osc_x4h57ch8
发布于 2018/04/24 09:11
字数 771
阅读 0
收藏 0

恶意提交攻击

1.拦截且修改:客户端发送到服务端接口的请求被第三方拦截,然后修改数据,再提交给客户端执行

例如:

  1. 客户端发送了将username重置为“小明”的请求
  2. 第三方拦截后修改为username重置为"小红"
  3. 然后提交给服务器执行
  4. 服务器认证了用户身份后(cookie或token都是客户端发出的,因此能通过认证)
  5. 那么客户端的username就被修改为“小红”

 

2.拦截不修改,重复提交攻击

例如:

  1. 客户端发送一个更新user表的请求
  2. 第三方拦截
  3. 然后短时间内复制重复提交
  4. 服务器认证后不断往数据库写数据

 

 

解决方案--签名:对客户端发来的请求进行签名

1.防篡改

  1. 客户端提交请求之前,先对自己请求的参数全部进行拼接加密得到一个加密字符串sign
  2. 请求参数加上sign,然后再发送给服务器
  3. 服务器将参数获取后也进行相同的拼接加密得到自己的sign
  4. 比较与客户端发来的sign是否相同
  5. 不相同则是被第三方修改过的,拒绝执行

关键:

  1. 第三方不知道加密方式和请求参数拼接规则,而客户端与服务器是知道的,因此第三方不知道修改参数后如何生成与服务器生成相同的sign
  2. 只要请求修改了一点点加密得到的就是不同的签名

 

2.防重放

(1)客户端的请求参数上加一个请求时间timestamp

原理:服务器获取请求的timestamp,然后比较自身系统时间,如果相差超过设定时间就是超时,该请求无效

作用:就算第三方截取了该请求,它也只能在设定时间内进行重放攻击

 

(2)客户端的请求参数上加一个随机字符串string

原理:服务端获取请求的随机字符串string,然后查看是否在设定时间内别的请求使用过该string,被使用过就判定无效

作用:加上timestamp,就造成短时间内一个请求只能使用一次,因为就算请求被拦截,它请求成功一次后,第二次复制重放时就因为随机字符串被使用而被拒绝

 

 

 

 

----------------------------------------以前的答案---------------------------------------------

// 1.使用session验证身份(查看id与session中id是否一致)

// 2.对id进行加密处理等(如果id被恶意修改,篡改者不知道加密方法则服务端可查证)

// 3.设置提交的间隔时间限制来防止重复提交

// 4.在session中设置提交标志(每一次服务器将表单呈现给客户端前设置一个标志,然后客户端提交表单时再验证该标志)

 

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

在云函数 SCF 里为 Next.js 跑 SSR

很多时候我们都希望首屏速度快,SEO 友好,那么相比于客户端渲染,SSR 渲染将是这方面的优势。Next.js、Nuxt.js 都是 SSR 框架。本篇文章将介绍 Next.js。 通常我们在部署 SSR 的时候,会担心...

腾讯云Serverless
30分钟前
19
0
一文带你初窥软件测试行业

三大原始问题一——软件测试是什么? 在一定条件下对软件系统进行审核、运行、评估,检验软件系统是否满足规定需求或者找出预期结果与实际结果之间的差别。为软件产品的质量和评价提供依据。...

a伟正是在下
37分钟前
17
0
如何避免APK文件的反向工程? - How to avoid reverse engineering of an APK file?

问题: I am developing a payment processing app for Android, and I want to prevent a hacker from accessing any resources, assets or source code from the APK file. 我正在开发适用......

富含淀粉
40分钟前
13
0
python 抓取 微信公众号文章

1、下载 Fiddler 安装 具体操作传送门 2、第一步已完成,入门开始吧 首先确保有微信客户端(推荐PC,移动端会多一些操作) 启动微信、Fiddler ,然后找到需要抓取的公众号(还是关注一下吧,...

acclea
57分钟前
9
0
JS深拷贝

let arr1 = [1, 2, 3, 4, { name: 'hh'}]/浅克隆****/// 1,展开运算符let arr2 = [...arr1]// 2.splicelet arr3 = arr1.splice(0)/深克隆****/// 1.基...

何祯粮
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部