Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第 131 题:接口如何防刷 #254

Open
ravencrown opened this issue Aug 23, 2019 · 18 comments
Open

第 131 题:接口如何防刷 #254

ravencrown opened this issue Aug 23, 2019 · 18 comments

Comments

@ravencrown
Copy link

去了京东、腾讯、虾皮等厂子都问到了这个问题。
我们之前也遇到过,基本就是后端工程师限制用户的接口调用次数,面试官希望可以有更多的答案。

@SuperJolly
Copy link

  1. referer校验
  2. UA校验
  3. 频率限制(1s内接口调用次数限制)

@impeiran
Copy link

impeiran commented Aug 24, 2019

把某个key加配料,带上时间戳,加密,请求时带上,过期或解密失败则403。

@yjua
Copy link

yjua commented Aug 26, 2019

防刷一般分两种:

  • 总调用次数受限制。这个一般是在后端做限制,单位时间内最多可调用次数。
  • 同一客户端次数限制。这个前端的一般使用是给接口调用加锁,在返回结果或者一定时间之后解锁。

@YoungYang7
Copy link

1:网关控制流量洪峰,对在一个时间段内出现流量异常,可以拒绝请求(参考个人博客文章 https://mp.csdn.net/postedit/81672222)
2:源ip请求个数限制。对请求来源的ip请求个数做限制
3:http请求头信息校验;(例如hostUser-AgentReferer
4:对用户唯一身份uid进行限制和校验。例如基本的长度,组合方式,甚至有效性进行判断。或者uid具有一定的时效性
5:前后端协议采用二进制方式进行交互或者协议采用签名机制
6:人机验证,验证码,短信验证码,滑动图片形式,12306形式
————————————————
版权声明:本文为CSDN博主「timy07」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/timy07/article/details/86467994

@twosugar
Copy link

前端埋点,判断是否用户行为

@ravencrown
Copy link
Author

是否可以用参数签名?

@woolson
Copy link

woolson commented Aug 26, 2019

刷接口直接走脚本,前端限制有一定作用,但不大。

  • 根据IP限制调用次数【请求在代理服务器被拦截nginx,减少后端服务被调用】;
  • 拦截器特定信息校验,例如:token【后端服务器拦截器,减少业务判断和处理】;

@changchangge
Copy link

1、UA校验
2、IP限制
3、验证码

参考:
https://www.zhihu.com/question/34980963

@Mikerui
Copy link

Mikerui commented Aug 27, 2019

前端可以使用节流的方式,添加时间戳等

@bgwd666
Copy link

bgwd666 commented Aug 28, 2019

前端如使用axios请求, 是有请求前拦截的, 把最近的一些请求地址加进数组, 请求前拦截器 判断一定时间内这个地址是否再出现 来控制请求频率

@mannymu
Copy link

mannymu commented Aug 30, 2019

例如,公开的投票网站,,如何防止刷票,防止不了。真的没办法。

@thinkfish
Copy link

前端可以使用节流的方式,添加时间戳等

前端节流对防刷意义不大,刷接口肯定不是通过点页面的按钮这种方式来刷的。

@brady0316
Copy link

1、校验请求头referer
2、校验请求token;
3、请求频率

@Jesseszhang
Copy link

反爬虫

@luckymore
Copy link

把某个key加配料,带上时间戳,加密,请求时带上,过期或解密失败则403。

@impeiran 不限制频率还是没用啊

@acejs
Copy link

acejs commented Aug 1, 2020

接口防刷,前端能做的很少吧。
刷接口那肯定不是通过DOM刷,那效率太低了。
我能想到的前端能做的优化无非就是防抖、节流这些

@pq-dong
Copy link

pq-dong commented Aug 24, 2020

刷是禁止不了的,只能提高刷的成本

前端:

  1. 限制按钮,表单提交次数,防抖
  2. 增加图片验证码,类似12306

后端:

  1. ip,user_agent,referer
  2. 用户唯一标示
  3. 简单验证码
  4. 手机号验证码
  5. api key,rsa加密认证,ca认证(后端与后端之间调用)
  6. ip黑名单(一般是刷的频率太大,达到ddos水平了或者确认为恶意调用)

@Yangfan2016
Copy link

后端
接口调用次数限流
通过 IP host referer ua 判断 限制
前端
增加验证码,之类的进行控制
接口防抖

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests