API接口防止参数篡改和重放攻击

// 获取token
String token = request.getHeader('token');
// 获取时间戳
String timestamp = request.getHeader('timestamp');
// 获取随机字符串
String nonceStr = request.getHeader('nonceStr');
// 获取请求地址
String url = request.getHeader('url');
// 获取签名
String signature = request.getHeader('signature');

// 判断参数是否为空
if (StringUtils.isBlank(token) || StringUtils.isBlank(timestamp) || StringUtils.isBlank(nonceStr) || StringUtils.isBlank(url) || StringUtils.isBlank(signature)) {
    //非法请求
    return;
}

//验证token有效性,得到用户信息
UserTokenInfo userTokenInfo = TokenUtils.getUserTokenInfo(token);

if (userTokenInfo == null) {
    //token认证失败(防止token伪造)
    return;
}

// 判断请求的url参数是否正确
if (!request.getRequestURI().equals(url)){
    //非法请求 (防止跨域攻击)
    return;
}

// 判断时间是否大于60秒
if(DateUtils.getSecond()-DateUtils.toSecond(timestamp)>60){
    //请求超时(防止重放攻击)
    return;
}

// 判断该用户的nonceStr参数是否已经在redis中
if (RedisUtils.haveNonceStr(userTokenInfo,nonceStr)){
    //请求仅一次有效(防止短时间内的重放攻击)
    return;
}

// 对请求头参数进行签名
String stringB = SignUtil.signature(token, timestamp, nonceStr, url,request);

// 如果签名验证不通过
if (!signature.equals(stringB)) {
    //非法请求(防止请求参数被篡改)
    return;
}

// 将本次用户请求的nonceStr参数存到redis中设置60秒后自动删除
RedisUtils.saveNonceStr(userTokenInfo,nonceStr,60);

//开始处理合法的请求
(0)

相关推荐

  • 微信公众号开发之配置服务器

    入口: 附上官方文档 详情的官方文档里面都有,我这边只写一些自己的理解,欢迎补充 URL: 是开发者用来接收微信消息和事件的接口URL,必须以http://或https://开头,只能是80 和 44 ...

  • 苹果CMS资源站采集API接口参数

    api接口仅供提供数据,可以直接在苹果CMS后台联盟采集中加入并提供给他人采集. 资源站分配唯一标识ID,用来区别绑定分类,这个ID一般由苹果CMS官方提供,不可随意修改设置,否则造成入库分类错乱. ...

  • 国际象棋云库API接口说明

    概述 国际象棋云库(简称'云库') API 接口分为两部分,访问云库,可以直接通过基于 HTTP 的 RESTful API 实现. 此外,在原有的 UCI 引擎通讯协议上扩展了云库相关的指令,云库. ...

  • 中国象棋云库API接口说明

    中国象棋云库API接口说明 概述 中国象棋云库(简称'云库') API 接口分为两部分,访问云库,可以直接通过基于 HTTP 的 RESTful API 实现. 此外,在原有的 UCI 引擎通讯协议上 ...

  • 盘点15个好用的API接口管理神器

    分布式实验室 1周前 如今,API已在软件.Web和移动应用程序开发领域无处不在,从企业内部到面向公众的应用以及与合作伙伴进行系统集成.通过使用API,开发人员可以创建满足各种客户需求的应用程序.而软 ...

  • IOT语义互操作性之API接口

    这个系列文章描述了一个单一的语义数据模型来支持物联网和建筑.企业和消费者的数据转换. 这种模型必须简单可扩展, 以便能够在各行业领域之间实现插件化和互操作性. 对于一个目前从事智能硬件的老码农,觉得这 ...

  • 微服务架构下的API接口驱动开发,设计和集成

    今天谈下在微服务架构下,接口设计和开发方面的思考. 对于微服务架构,SOA和Http Rest API接口设计,在我前面的头条文章中均有专门的说明,因此对于基础方面的解释在本文不再重复.对于今天要写的 ...

  • 全字段多条件搜索(api接口)

    近期在做项目时遇到了一个全表全字段多条件搜索的需求,在平时搜索最常见的就是 字段+like +'% 条件%'这种模式,但遇到多条件多字段时,这种就不适用了. 表字段已知,条件未知,条件数量未知,这种情 ...

  • python接口自动化21-规范的API接口文档示例

    前言 接口文档到底长啥样?做接口测试最大的障碍在于没有接口文档,很多公司不注重接口文档的编写,导致测试小伙伴没见过接口文档. 运气好一点的测试小伙伴可能厚着脸皮找开发要过接口文档,然而拿过来的接口文档 ...

  • API 接口四连问!问你怕不怕!

    回复'架构师'获取资源 在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安 ...