​前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提供的接口来进行业务交互。网页或者app,只要抓下包就可以清楚的知道这个请求获取到的数据,也可以伪造请求去获取或攻击服务器;也对爬虫工程师来说是一种福音,要抓你的数据简直轻而易举。那我们怎么去解决这些问题呢?

接口签名

我们先考虑一下接口数据被伪造,以及接口被重复调用的问题,要解决这个问题我们就要用到接口签名的方案,

签名流程

签名规则

1、线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret

2、加入timestamp(时间戳),5分钟内数据有效

3、加入临时流水号 nonce(防止重复提交),至少为10位。针对查询接口,流水号只用于日志落地,便于后期日志核查。针对办理类接口需校验流水号在有效期内的唯一性,以避免重复请求。

4、加入签名字段signature,所有数据的签名信息。

以上字段放在请求头中。

签名的生成

签名signature字段生成规则所有动态参数 = 请求头部分 + 请求URL地址 + 请求Request参数 + 请求Body

上面的动态参数以key-value的格式存储,并以key值正序排序,进行拼接

最后拼接的字符串 在拼接appSecretsignature =DigestUtils.md5DigestAsHex(sortParamsMap +appSecret)即拼接成一个字符串,然后做md5不可逆加密

请求头部分

请求头=“appId=xxxx&nonce=xxxx×tamp=xxxx&sign=xxx”请求头中的4个参数是必须要传的,否则直接报异常

请求URL地址这个就是请求接口的地址包含协议,如https://mso.xxxx.com.cn/api/user

请求Request参数即请求为Get方式的时候,获取的传入的参数

请求Body即请求为Post时,请求体Body从request inputstream中获取保存为String形式签名算法实现基本原理其实也比较简单,就是自定义filter,对每个请求进行处理;整体流程如下1)验证必须的头部参数2)获取头部参数,request参数,Url请求路径,请求体Body,把这些值放入SortMap中进行排序3)对SortMap里面的值进行拼接4)对拼接的值进行加密,生成sign5)把生成的sign和前端传入的sign进行比较,如果不相同就返回错误

我们来看一下代码

1.@Componentpublic

2.public class SignAuthFilter extends OncePerRequestFilter{

3.static final String FAVICON = "/favicon.ico";

4.static final String PREFIX = "attack:signature:";

5.}

以上是filter类,其中有个appSecret需要自己业务去获取,它的作用主要是区分不同客户端app。并且利用获取到的appSecret参与到sign签名,保证了客户端的请求签名是由我们后台控制的,我们可以为不同的客户端颁发不同的appSecret。

我们再来看看验证头部参数

上图其实就是验证是否传入值;不过其实有个很重要的一点,就是对此请求进行时间验证,如果大于10分钟表示此链接已经超时,防止别人来到这个链接去请求。这个就是防止盗链。

我们在来看看,如何获取各个参数

上面我们获取了各个参数,相对比较简单;我们在来看看生成sign,和验证sign

上面的流程中,会有个额外的安全处理,· 防止盗链,我们可以让链接有失效时间· 利用nonce参数,防止重复提交

在签名验证成功后,判断是否重复提交;原理就是结合redis,判断是否已经提交过

总结今天我们用签名的方式,对我们对外提供的接口起到了保护作用;但这种保护仅仅做到了防止别人篡改请求,或者模拟请求。

但是还是缺少对数据自身的安全保护,即请求的参数和返回的数据都是有可能被别人拦截获取的,而这些数据又是明文的,所以只要被拦截,就能获得相应的业务数据。

老顾下一篇文章会介绍如何保证接口数据的安全,谢谢!!!

前后端分离重复提交_阿里一面:如何保证API接口数据安全?相关推荐

  1. 前后端分离重复提交_防止表单重复提交(二)

    实现原理: 1.页面和后台同步存入一个token,一旦刷新页面,此token都是会刷新的 2.提交表单时,会带上这个标识token 3.请求后台,将此token和后台存入的token比对 3.1 校验 ...

  2. 前后端分离重复提交_java+react前后端分离项目处理重复提交问题

    重复提交的问题在web开发中是很常碰到的一个问题,主要分为前端和后端两种途径解决,前端处理一般采用提交事件后,禁止用户再次点击提交按钮,等待服务端结果再重置提交按钮状态. 本文着重介绍,通过java后 ...

  3. 前后端分离:使用 mest 做契约测试跟踪 API 接口变更

    还在担心后端 API 变更对前端的影响?快来使用 mest 在实施前后端分离架构的过程中,最让人苦恼的莫过于:API 发生了变化.API 发生变化的原因那可是相当的丰富:业务变化.字段名出错.第三方接 ...

  4. Java前后端分离第三方登录_网站前后端分离情况下如何实现QQ微信等第三方登陆-Fun言...

    前言 最近在弄第三方登录,实现起来很简单,就是调几个接口获取个人信息即可,详细了解:maven项目整合QQauth2.0第三方登录详细说明,然后因为本网站是前后端分离的,所以不能再回调接口那里直接跳转 ...

  5. 前后端分离项目-电脑之家_总结

    项目总结 1.项目名称 电脑之家 2.项目概述 电脑之家这个项目是为C公司开发的一个o2o模式的项目.它是以电脑为中心,不仅提供了电脑销售,电脑维修基本功能,还提供了电脑上门维修服务,电脑配件购买,电 ...

  6. wcf afterreceiverequest获取body数据_阿里面试官的灵魂拷问:究竟如何保证API接口数据安全?...

    前言 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用 ...

  7. 阿里一面:如何保证API接口数据安全?

    来源:https://www.toutiao.com/i6869353034188030471 前言 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合 ...

  8. 64如何传入后台_如何保证API接口数据安全?

    (给ImportNew加星标,提高Java技能) 转自:Java互联网架构师小马 链接:https://www.jianshu.com/p/e2d362ede89f 前后端分离的开发方式,我们以接口为 ...

  9. java后端 防重复提交_后台防止表单重复提交

    具体的做法: 1.获取用户填写用户名和密码的页面时向后台发送一次请求,这时后台会生成唯一的随机标识号,专业术语称为Token(令牌). 2.将Token发送到客户端的Form表单中,在Form表单中使 ...

最新文章

  1. 小微贷是美团的上坡之路?
  2. Java黑皮书课后题第10章:*10.22(实现String类)Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString1)
  3. osg::ComputeBoundsVisitor用法(一)
  4. 4-具体学习git--分支
  5. 一起动手打造个人娱乐级linux
  6. java Switch里面的类型问题
  7. JAVA 正则表达式 RegexUtil
  8. Lync Server 2013企业版部署系列之三:CA准备
  9. 说说vue-cli中使用flexible和px2rem-loader
  10. LoadRunner11的安装与破解
  11. 软件测试人员必备的60个测试工具清单,果断收藏了!
  12. 矩阵分析与应用学习总结目录
  13. Java 基本数据类型存储位置
  14. vcf文件的index
  15. 【历史上的今天】3 月 4 日:美团网正式上线;Dropbox 的创始人出生;PS2 游戏机问世
  16. VS2015无法新建项目错误及解决方法:无法打开“……/VC?VCWizards/default.vcxproj”因为此版本的应用程序不支持其项目类型(.vcxproj)
  17. NRF24L01模块实现一发一收和多发一收
  18. 【操作系统】线程栈如何分配
  19. 小米pro 笔记本 计算机,【MI/小米笔记本 Pro超极本】MI 小米 笔记本 Pro 15.6英寸 笔记本电脑【报价 价格 评测 怎么样】 -什么值得买...
  20. 爬取百思不得姐的段子

热门文章

  1. mybatis使用in语句作为查询条件
  2. block的使用(六)
  3. DDLog-不同颜色打印信息
  4. 设置ArcGIS的外观改回到出厂
  5. 代码简洁(注意事项)
  6. 一周以来的工作总结--oracle分区的迁移
  7. onbeforeunload与onunlond的区别
  8. phpMyAdmin 尝试连接到MySQL 服务器的错误解决方法
  9. 程序员常用编程工具: VS Code,那些你不得不知道的小知识!
  10. HAO3GP整站源码学生当时就蒙了