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

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

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

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

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

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