V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cs3230524
V2EX  ›  程序员

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

  •  
  •   cs3230524 · 2019-07-27 22:54:31 +08:00 · 3408 次点击
    这是一个创建于 1945 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在用户是登录鉴权后返回给前端一个 token,这个 token 过期时间很长,一般是几天。然后别人就能拿到这个 token 肆意请求后端接口了。

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

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

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