如何防止前后端分离的项目被爬或者被做成辅助工具?

2019-07-27 22:54:31 +08:00
 cs3230524
现在用户是登录鉴权后返回给前端一个 token,这个 token 过期时间很长,一般是几天。然后别人就能拿到这个 token 肆意请求后端接口了。

那么现在如何防止这种情况发生?有没有其他动态加密或者验证的方法?
3304 次点击
所在节点    程序员
17 条回复
nyanyh
2019-07-27 23:12:56 +08:00
token 时间缩短
限制后端 API 单位时间内访问次数
检测前端环境指纹( webrtc/canvas 之类),发现变化较大直接拉黑 token+访问者 IP
nyanyh
2019-07-27 23:14:49 +08:00
或者模仿淘宝之类,在前端使用一个复杂混淆的 js 存放一套动态参数校验算法,访问后端接口时验证此参数
liuxey
2019-07-27 23:20:00 +08:00
了解下反爬方面的知识,最基本的 UA、IP 什么的不说了,主要是行为方面,总结下:
一个人类不可能 1s 内访问特殊接口>N 个
一个人类不可能连续 N 小时访问你的 API
一个人类不可能连续请求某一个接口,但是参数在做遍历,如 id=1...id=999
一个人类不可能只请求 API 接口而不请求资源文件
oppoic
2019-07-27 23:21:24 +08:00
楼上的做法可以,但是为了一个或者几个捣乱的就加规则无疑增加了服务端的负担,毕竟大部分用户都是正常用户。我建议后端加上接口访问统计即可,每天扫一眼哪个 token 访问接口次数不正常,手动封一下该用户即可。
victor
2019-07-27 23:48:40 +08:00
@oppoic 那它可能会用多个 token 呢。比如 10 个 token 每次请求 API 的时候随机选一个。
cs3230524
2019-07-28 10:49:43 +08:00
目前的环境是微信小程序。所以:
2 楼的办法应该是没啥用的,我了解过淘宝这个。攻击者可以很轻松拿到这个 js 而不用考虑具体算法,直接用载入这个 js 调用函数来模拟生成参数。始终都是前端都东西。
现在用户数据很容易获取到,所以 3、4 楼的办法也基本无效,封了他可以再重新申请。
unclemcz
2019-07-28 13:00:05 +08:00
接口加时间戳参数和根据时间戳加密的 token,加密代码混淆,可以防绝大部分场景,但还是防不住有经验的人反编译小程序包 wxapkg 拿到加密代码。
lscho
2019-07-28 13:14:17 +08:00
2 楼 3 楼的办法是正确的,也是常用的。不明白为什么说无效?

2 楼的办法就是自己实现一个签名算法,前端混淆一下,后端进行验证,只要算法没有被破解,或者定期更换前端 key,就肯定是安全的。
3 楼的办法也很实用,行为验证这个肯定没法破解,目前阿里系都是行为验证。比如你登录页面是从首页链接过来的,那么没有请求首页接口,直接请求登录接口肯定是异常的。只请求接口,不请求静态资源,肯定也不是真人。如此规则多检测几条行为,绝对破解不了。
danhahaha
2019-07-28 13:31:24 +08:00
@liuxey 在 3 楼基础之上,加入一个权重系数,机器人系数
1s 内访问特殊接口>4 计 4 分,
连续 N 小时访问 计入 N 分
有参数在做遍历动作计 10 分
只请求 API 接口而不请求资源文件计入 10 分

给每个 token 计分,然后超过一个阙值,直接封,阙值可以手动调整
annielong
2019-07-28 13:58:58 +08:00
看影响度,如果影响大就加限制,技术从来就不是问题,问题是权衡是否值当加限制,
locoz
2019-07-28 14:35:50 +08:00
看了一下楼主的回复,Web 端都基本无解的问题,小程序里就更别想着解了,参考我在这个帖子下的回复:后端接口被盗用有什么好办法么?
https://www.v2ex.com/t/586612
行为验证(风控)不现实,成本太高。
LLaMA2
2019-07-28 18:02:30 +08:00
有登录,手机号是用户名?
那么问题来了,自己写一套工具链,专业做这种检测的。让机器人程序筛选出有问题的账号,封停手机号,随着时间推移,不断的完善机器人程序的筛选规则。他要是有几百个几万个手机号,那他牛逼。
starsriver
2019-07-29 00:17:20 +08:00
都在讨论反爬。如果是前端服务器只有有限个,跨域限制了解一下。
Kinnice
2019-07-29 08:59:58 +08:00
@ye4tar 现在手机号几分钱就可以接一个码
nnnToTnnn
2019-07-29 09:35:23 +08:00
reCaptcha 不就很好的解决这个问题? 而且还是免费的
nnnToTnnn
2019-07-29 09:36:31 +08:00
@locoz web 端的无解? 这么说 reCaptcha 是个失败的项目?
locoz
2019-07-29 10:41:20 +08:00
@nnnToTnnn #16 是 [基本] 无解,验证码目前没有破不了的,单纯是性价比的问题而已,只要破验证码后所做的操作能产生足够的收益就会有人去搞。
reCaptcha 并不失败,它被用在数据价值不高的地方并且开启严格验证的时候效果会很好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586798

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX