3.请求安全-- 如何验证请求的唯一性

#如何验证请求的唯一性# ##前言## 讲到请求的唯一性,是我在接口API中开发中遇到的一个问题,有一个需求就当当你的链接被捕获之后如何让它失效,当然是在别人没有破解规则之前!如果别人截取了你的请求可以进行大量请求攻击(防止重复请求攻击(RepeatAttack))而且会跑到逻辑层并不会在拦截器中拦截,我们要做的就是在拦截器避免这种情况,当然实现的方式有很多种

ps:当然是防御不了内容被篡改但是在后面的文章我会减少一种我现在在使用的一套结合起来的请求安全方面来最大可能的避免此类问题

##1.浅谈各项解决方案## ###1.1微信### 微信分为主动请求(比如一个用户向公众号发送了消息要返回什么类容,可以指向专门的自定程序)和接受请求(如微信推送,点对点推送,客服,提醒)

第一种:主动请求

主动请求微信是会有一个机制,绑定URL(服务器地址)绑定服务器地址的话,如果别人不是侵入了你的服务器或者是改变了这个地址的指向基本
很难操作的余地

第二种:接受请求

对于接受的请求来说微信并没有限定必须是摸个特定地址的请求,也就是说任何一台机器都可以请求微信,微信也需要处于安全考虑,别人捕获了
一个推送微信的请求可以不停的访问,这样就可能导致服务器资源被占用正常的用户无法使用或响应时间长(不过对于这种大公司应付这种攻击
的能力是很强的,当然对于小公司来说就不同了,资源有限的情况下最好是可以避免这种拦截请求频繁访问的攻击-攻击也就是所谓的DdoS攻击)
微信几套方式来防止这种问题
1.使用公众号的access_token获取服务器的IP地址列表
2.有效时常access_token用一些凭证获取,在所有的请求都会验证,而且会有失效时间,每天获取的access_token也是有限的
3.所有的被请求的接口都会有对于每个用户次数限制
综合以上基本上就是一个堡垒了,一必须通过服务器验证用户有效性(相当于登录),然后获取动态服务器地址,然后是请求频率限制

但是对于实现实现起来局限比较多,成本相当高也比较复杂.

###1.2大众点评### 大众点评是提供了一套"商家接入层接口"这套接口时提供给服务器与服务器通讯的这点和微信不同 只有一种接受请求

大众点评并没有采用对于请求唯一性的验证,因为是服务器之间的通讯基本可以理解
但是他也使用了一些方法通讯安全的处理方法
1.appKey请求开发者作为请求加解密的参数
2.点评提供给您的开发者token

相对于微信来说点评的这个安全性也许看起来小了很多,但是这是对于服务器与服务器对接的本身内部的安全级别就比较高

##2.一个简单的解决方案介绍## 我推荐的这个方式比较适合,不想花太大成本,又想得到比较好的安全效果人群使用

当然请求唯一性是对于一个用户(在微信里面是appid,在点评里面是appKey)这个都是用户的唯一标示

在这个简单的解决方案中有两个比较重要的东西,随机数,时间戳,通过这两个东西加上用户唯一标示就能实现一套简单的请求唯一性验证

还是一句老话:如何实现是最后一个问题

在这里我还是采用redis键值存储,并且约定除了登录外的所有接口请求是都需带用户唯一标示,所有请求都必须有客户端生成的随机数,时间戳

###2.1用户请求登录接口需要做的操作: 1.通过用户的用户名密码或者一些其他东西获取用户的唯一标示 2.把用户的唯一标示作为key随机数和时间戳作为value保存起来 3.返回用户的唯一标示

###2.2验证请求唯一性时需要做的事情 1.获得用户的唯一标示 2.通过唯一标示获取上次请求的时间戳和随机数 3.验证时间戳是不是比上次请求的时间戳要晚,随机数是不是和前一次随机数相同 同时达到这两个条件时认定请求重复 4.验证通过吧这次的请求随机数和时间戳存入

以上就是基本解决思路,可以给存入的 时间戳和随机数一个过期时间这样当两次请求距离时间过久也一样会过滤掉

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏风中追风

分布式进阶__zookeeper的选举机制

但是,zookeeper工作时,会选出一个节点为leader,其他则为follower

30570
来自专栏北京马哥教育

预防高逼格Linux黑客招数,不学你就后悔吧!

本文由马哥教育Linux云计算面授班24期学员推荐,转载自互联网,作者为And,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。 很多人都...

32370
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装和保护Mosquitto MQTT Messaging Broker

MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。它通常用于地理跟踪车队,家庭自动化,环境传感器网络和公用事业规模数据收集...

1.2K10
来自专栏Java帮帮-微信公众号-技术文章全总结

day01.互联网架构/Linux/YUM 【大数据教程】

day01.互联网架构/Linux/YUM 一、大型互联网架构演变历程 1. 淘宝技术这10年 1.1. 淘宝现状 高并发已经成为当前互联网企业面临的巨大挑...

40270
来自专栏Java进阶

zookeeper的选举机制

465140
来自专栏林德熙的博客

win10 uwp 后台获取资源

需要知道的是,获取的资源类型是 Object ,这时,建议使用 cast 转换,而不是使用 as。

14610
来自专栏Linyb极客之路

APP架构设计经验谈:APP登录自动登录—token

程序员总能给自己找到偷懒的方法,有的程序为了省事,会在用户登录后,直接把用户名和密码保存在本地,然后每次调用后端接口时作为参数传递。真省事儿啊!可这种方法简单就...

1.6K40
来自专栏FreeBuf

如何用ESP8266做个钓鱼测试WIFI

其实关于esp8266网上有许多教程,好多前辈玩这个已经好多年了,但为了给像我这样的小白系统的解决制作过程中的一些问题,我还是写出来。 我自己也是刚开始玩,如有...

88280
来自专栏逍遥剑客的游戏开发

LG WebOS TV降级方法

62090
来自专栏逸鹏说道

当GitHub把我当成DDos攻击者拉进了黑名单中。。。

Github黑名单自救+快速稳定FQ 异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html 原...

36380

扫码关注云+社区

领取腾讯云代金券