Daily-Interview-Question
Daily-Interview-Question copied to clipboard
第 131 题:接口如何防刷
去了京东、腾讯、虾皮等厂子都问到了这个问题。 我们之前也遇到过,基本就是后端工程师限制用户的接口调用次数,面试官希望可以有更多的答案。
- referer校验
- UA校验
- 频率限制(1s内接口调用次数限制)
把某个key加配料,带上时间戳,加密,请求时带上,过期或解密失败则403。
防刷一般分两种:
- 总调用次数受限制。这个一般是在后端做限制,单位时间内最多可调用次数。
- 同一客户端次数限制。这个前端的一般使用是给接口调用加锁,在返回结果或者一定时间之后解锁。
1:网关控制流量洪峰,对在一个时间段内出现流量异常,可以拒绝请求(参考个人博客文章 https://mp.csdn.net/postedit/81672222)
2:源ip请求个数限制。对请求来源的ip请求个数做限制
3:http请求头信息校验;(例如host,User-Agent,Referer)
4:对用户唯一身份uid进行限制和校验。例如基本的长度,组合方式,甚至有效性进行判断。或者uid具有一定的时效性
5:前后端协议采用二进制方式进行交互或者协议采用签名机制
6:人机验证,验证码,短信验证码,滑动图片形式,12306形式
————————————————
版权声明:本文为CSDN博主「timy07」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/timy07/article/details/86467994
前端埋点,判断是否用户行为
是否可以用参数签名?
刷接口直接走脚本,前端限制有一定作用,但不大。
- 根据
IP限制调用次数【请求在代理服务器被拦截nginx,减少后端服务被调用】; - 拦截器特定信息校验,例如:
token【后端服务器拦截器,减少业务判断和处理】;
1、UA校验 2、IP限制 3、验证码
参考: https://www.zhihu.com/question/34980963
前端可以使用节流的方式,添加时间戳等
前端如使用axios请求, 是有请求前拦截的, 把最近的一些请求地址加进数组, 请求前拦截器 判断一定时间内这个地址是否再出现 来控制请求频率
例如,公开的投票网站,,如何防止刷票,防止不了。真的没办法。
前端可以使用节流的方式,添加时间戳等
前端节流对防刷意义不大,刷接口肯定不是通过点页面的按钮这种方式来刷的。
1、校验请求头referer 2、校验请求token; 3、请求频率
反爬虫
把某个key加配料,带上时间戳,加密,请求时带上,过期或解密失败则403。
@impeiran 不限制频率还是没用啊
接口防刷,前端能做的很少吧。 刷接口那肯定不是通过DOM刷,那效率太低了。 我能想到的前端能做的优化无非就是防抖、节流这些
刷是禁止不了的,只能提高刷的成本
前端:
- 限制按钮,表单提交次数,防抖
- 增加图片验证码,类似12306
后端:
- ip,user_agent,referer
- 用户唯一标示
- 简单验证码
- 手机号验证码
- api key,rsa加密认证,ca认证(后端与后端之间调用)
- ip黑名单(一般是刷的频率太大,达到ddos水平了或者确认为恶意调用)
后端 接口调用次数限流 通过 IP host referer ua 判断 限制 前端 增加验证码,之类的进行控制 接口防抖