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

后端接口被盗用有什么好办法么?

  •  
  •   jaskle · 2019-07-27 07:24:27 +08:00 via Android · 10166 次点击
    这是一个创建于 1706 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们软件是小程序和手机 APP,小程序打开后是匿名就能够看到的资源信息,就像一个新闻页。但是发布不久就被别人抄了,页面做的稀烂功能一样,接口用的我们的。但是由于是匿名可以访问,所以只要反编译小程序就能看到 JS。恶心的一批。想问大家有什么办法不?
    65 条回复    2019-08-26 16:32:01 +08:00
    xujialiang
        1
    xujialiang  
       2019-07-27 07:30:38 +08:00
    小程序里限制 openid 的调用次数频率
    jaskle
        2
    jaskle  
    OP
       2019-07-27 07:32:12 +08:00 via Android
    @xujialiang 没啥用,他小程序直接用的我们的接口,他们连后台都没有,0 成本。
    xuanbg
        3
    xuanbg  
       2019-07-27 07:32:55 +08:00
    匿名可以访问就没办法了
    wangsongyan
        4
    wangsongyan  
       2019-07-27 07:34:21 +08:00 via iPhone
    能不能把小程序的 AppId 传到后台,你再加个验证
    whileFalse
        5
    whileFalse  
       2019-07-27 07:34:25 +08:00 via iPhone   ❤️ 62
    改接口,对于老版本接口随机返回反动言论,然后趁对方没发现举报之
    echotpq
        6
    echotpq  
       2019-07-27 07:34:53 +08:00 via Android
    设置来源,接口 ip 限制等等
    wangsongyan
        7
    wangsongyan  
       2019-07-27 07:34:56 +08:00 via iPhone
    @whileFalse 这波操作真是 666
    KuroNekoFan
        8
    KuroNekoFan  
       2019-07-27 07:35:19 +08:00 via iPhone
    你们接口不需要 token 校验什么的吗,
    z7356995
        9
    z7356995  
       2019-07-27 07:35:28 +08:00 via Android
    我以前是在第一次请求页面发送一个随机且唯一 rss public key. 然后以后每次请求都用这个 key 加密,服务器上再解开。因为不是明文,每个请求的 key 又不一样,可以难道一般菜鸟吧
    flyzero
        10
    flyzero  
       2019-07-27 07:52:54 +08:00 via Android   ❤️ 1
    referer 限制就好了,应该每个小程序对应一个的
    TypeNANA
        11
    TypeNANA  
       2019-07-27 07:58:29 +08:00 via Android
    请求头里面有 appid,可以借这个来确定请求 app 来源
    lasuar
        12
    lasuar  
       2019-07-27 08:04:50 +08:00
    后端接口谁写的,别人随便调?
    lasuar
        13
    lasuar  
       2019-07-27 08:10:31 +08:00   ❤️ 1
    sorry 没看清。相当于你的接口被别人破解了,可以 referer+appid
    wangxiaoaer
        14
    wangxiaoaer  
       2019-07-27 08:15:46 +08:00 via Android
    @TypeNANA 对方通过服务器反代怎么办?限 IP ? 很多共用公网 IP,限流容易被误伤。
    hhyvs111
        15
    hhyvs111  
       2019-07-27 08:16:42 +08:00
    鉴权都不做的吗?
    tanszhe
        16
    tanszhe  
       2019-07-27 08:22:15 +08:00
    多简单的事情
    加个中间件 通过 jscode 验证一下不就完了
    其他人知道接口也无法调用
    treblex
        17
    treblex  
       2019-07-27 08:37:27 +08:00 via Android
    既然是新闻,在正文加个二维码不就行了🤣🤣
    zgl263885
        18
    zgl263885  
       2019-07-27 08:48:56 +08:00 via iPhone
    某种角度来讲,反爬只能提高门槛,不能完全杜绝
    xenme
        19
    xenme  
       2019-07-27 09:14:27 +08:00 via iPhone
    不定时更新下小程序,然后给他的前端返回错误的垃圾内容
    jaskle
        20
    jaskle  
    OP
       2019-07-27 09:15:13 +08:00 via Android
    @whileFalse 你这个操作好像挺溜,不过危险系数太高。
    其实麻烦就在于匿名访问,就是不需要注册,研究了一下腾讯之类的,他们是 web 不允许跨域,而且加了 referer,所以别人偷不了。但是小程序只要设置 ip 白名单就行,他也不管这个 ip 是谁的,哎,恶心
    jaskle
        21
    jaskle  
    OP
       2019-07-27 09:35:20 +08:00 via Android
    经查证确实有 referer,可以检验 appid,谢谢大家了
    zibber
        22
    zibber  
       2019-07-27 09:36:36 +08:00
    小程序静默授权, 接口检查一下登录状态
    sammmmm
        23
    sammmmm  
       2019-07-27 09:40:53 +08:00
    referer 不是可以修改吗
    pubby
        24
    pubby  
       2019-07-27 09:44:43 +08:00 via Android
    @sammmmm 小程序本身不能改 referer,所以还是能识别出来的
    jaskle
        25
    jaskle  
    OP
       2019-07-27 11:34:32 +08:00 via Android
    @sammmmm 只有搭建服务端能够抓取修改 referer,浏览器小程序之类的无权修改,如果对方用服务器我们就能轻松封掉他的 ip,所以不必担心
    jmk92
        26
    jmk92  
       2019-07-27 11:52:00 +08:00
    @jaskle 你封 referer,他可以加反代,你封 IP,他可以用拨号 vps(全国混播),而且还容易误伤。
    不能简单的让他访问不了,否则他还会想办法,你要让他时不时的不能用,动不动内容还乱了,专门为他写一套流程,得整的他一脸懵逼,访问还是正常的,时不时就出乱七八糟的,让他自己放弃。
    chinvo
        27
    chinvo  
       2019-07-27 12:15:51 +08:00
    静默授权获取 openid,后台用 openid 取一下用户信息,不是你家的小程序,取不到信息
    neko77
        28
    neko77  
       2019-07-27 14:23:24 +08:00
    数据投毒,访问频率高的随机搞点乱数据, [斜眼笑]
    mamahaha
        29
    mamahaha  
       2019-07-27 14:30:47 +08:00
    感觉这都是开学第一天就该解决的问题,你这都毕业好几年了,还没解决。
    mumbler
        30
    mumbler  
       2019-07-27 14:44:02 +08:00
    简单加个密,就能防住大多数人. 加个 time 和 token 参数,time 传时间戳,客户端都根据时间戳加盐做 md5,生成一个 token,服务器拿到 time 用同样算法生成 token 和传上来的 token 对比一下,不一致就返回假数据,如果一致再检查下时间戳是否过期,过期也返回假数据
    licoycn
        31
    licoycn  
       2019-07-27 16:03:42 +08:00
    小程序授权,之后的接口都需要身份验证,就解决了,随便他们调反正获取不到数据
    unclemcz
        32
    unclemcz  
       2019-07-27 16:07:52 +08:00 via Android
    @mumbler 加密代码再混淆一下,能降低小程序 wxapkg 反编译的成功率。
    jianshou
        33
    jianshou  
       2019-07-27 17:05:04 +08:00
    推送辣鸡广告,自己人接收后处理一下
    Greatshu
        34
    Greatshu  
       2019-07-27 17:41:27 +08:00   ❤️ 1
    这是免费广告位啊。改接口,接入广告联盟,反撸一波。
    xnode
        35
    xnode  
       2019-07-27 17:44:28 +08:00
    ...多简单的事情, 让自己的客户端价格 key 验证,服务器屏蔽错误 key
    qoras
        36
    qoras  
       2019-07-27 18:10:34 +08:00
    加一套鉴权机制
    wozhizui
        37
    wozhizui  
       2019-07-27 18:10:40 +08:00 via Android
    token 认证
    dremy
        38
    dremy  
       2019-07-27 18:57:29 +08:00 via iPhone
    动态 csrf token 了解一下,跟时间戳相关加密的
    MMMMMMMMMMMMMMMM
        39
    MMMMMMMMMMMMMMMM  
       2019-07-27 19:25:17 +08:00
    token 他能反复拿

    referer 能伪造

    真正狠的就是悄悄地 间歇性 给他返回错误结果

    他程序三天两头出 BUG 还重现不了心态肯定崩
    ruandao
        40
    ruandao  
       2019-07-27 19:37:43 +08:00
    @MMMMMMMMMMMMMMMM 正常用户也被伤了
    ChangQin
        41
    ChangQin  
       2019-07-27 19:46:42 +08:00
    恶魔一点的,后台来一套 se 情的,能导致直接被封但是你们得用另一个接口。
    善良一点的,加各种验证
    wangningkai
        42
    wangningkai  
       2019-07-27 21:47:21 +08:00
    一般的简单做法就是接口参数验签
    DipperRoy
        43
    DipperRoy  
       2019-07-27 21:52:53 +08:00 via Android
    在 header 上塞点无用数据 然后把校验信息字段插进去
    unclemcz
        44
    unclemcz  
       2019-07-27 21:56:28 +08:00 via Android
    @wangningkai 一台 root 后的安卓机,微信小程序能拿到整个包,然后反编译,现在所知的情况是重要代码加密混淆后能暂时增加反编译的难度,以后可能也无法幸免。
    encro
        45
    encro  
       2019-07-27 22:12:31 +08:00
    举报就行了,腾讯小程序域名是有限制的。
    Raynard
        46
    Raynard  
       2019-07-27 22:22:03 +08:00
    抓 1024 的某区文章标题。。

    然后随机返回。。。
    mostkia
        47
    mostkia  
       2019-07-27 22:38:19 +08:00
    @whileFalse woc 太狠了,你是魔鬼吗?哈哈
    Koreyoshi
        48
    Koreyoshi  
       2019-07-28 01:12:28 +08:00
    可以考虑把小程序的云开发,当做中间件来使,通过云函数调用你的 API,小程序的权限控制来限制第三方访问。
    moxiaonai
        49
    moxiaonai  
       2019-07-28 01:22:48 +08:00 via Android
    检验 refer,前端接口加个复杂点的混淆加密 token
    gIrl1990
        50
    gIrl1990  
       2019-07-28 02:06:40 +08:00
    @neko77 https://www.v2ex.com/t/586612?p=1#r_7678881
    这种行为感觉有点可耻。
    jaskle
        51
    jaskle  
    OP
       2019-07-28 05:40:21 +08:00 via Android
    se 数据估计被封的不仅是对方的小程序,估计连我的域名和主机都凉了。其实我感觉验证 openid 比较稳,这样即使造假也能控制住
    laoyuan
        52
    laoyuan  
       2019-07-28 07:15:59 +08:00
    免费流量越多越好啊,不要挡住,悄摸得利用起来
    auciou2
        53
    auciou2  
       2019-07-28 07:37:34 +08:00
    方案有很多。可以给接口增加一个验证 ID+超时。验证 ID 可以定期更新,或者随机产生,每次都不一样。
    luozic
        54
    luozic  
       2019-07-28 09:58:29 +08:00 via iPhone
    小程序有 id 的。 搞个网关在前面 监控和调用授权整上
    miniwade514
        55
    miniwade514  
       2019-07-28 10:31:47 +08:00
    @MMMMMMMMMMMMMMMM 不懂求教,token 他能反复拿是指什么? csrf token 不是一次性的吗?
    NewConn
        56
    NewConn  
       2019-07-28 10:55:25 +08:00 via Android
    @wangsongyan 你好骚啊🌸🐔
    AppxLite
        57
    AppxLite  
       2019-07-28 12:22:14 +08:00
    请求加上 jscode,服务端看看能不能解密出 openid,如果不能证明是不合法的调用。
    runtu2019
        58
    runtu2019  
       2019-07-28 13:43:12 +08:00
    加密接口数据,解密方法用混淆,多跳几个方法!
    locoz
        59
    locoz  
       2019-07-28 13:51:45 +08:00 via Android   ❤️ 2
    这本质上是一个反爬问题。
    你现在首先要解决接口能直接被别人从小程序上调用的问题,应该有办法可以判断是哪个小程序上调用的。
    解决完这个之后再在接口上加个校验参数,每次调用接口的时候都拿其他参数和当前时间之类的可变值生成一次,并且服务端接到后也生成一次对比是否一致。
    然后在这个基础上将代码进行高度混淆,使生成校验参数的逻辑难以被看懂。
    如果做到这个程度之后还有人搞你,你还可以加上单 IP 频率限制、根据隐藏条件返回假数据、返回数据加密后在小程序端解密等各种手段。
    如果还有人搞你的话你就放弃抵抗吧,他的成本已经被你提到比较高的程度了,经过多次调整、在需要服务器+代理 IP+逆向的情况下依然坚持获取你的数据并放到自己的小程序上展示,说明你的数据价值很高,值得他这么做,你能做的只有举报、走法律手段(成本较高)。
    MMMMMMMMMMMMMMMM
        60
    MMMMMMMMMMMMMMMM  
       2019-07-28 19:00:26 +08:00
    @miniwade514 无限的 Debug 往前追,可以追出你发 token 的流程,跑一遍就行了。

    emmmm,就好比 QQ 现在的网页登录,先访问了一个 url 给你个值 https://ssl.ptlogin2.qq.com/check

    然后再给他各种偏移加盐(js 里都可以直接扒出 function 来用),带好 cookie,失效前一起再送过去,server 给你发 token 就能用了,失效再拿就好

    比 10 年前的登录是复杂了很多,增加了些破解难度,但实际上还是没用
    winglight2016
        61
    winglight2016  
       2019-07-28 20:28:24 +08:00
    返回的列表里,随机加上几条广告,详情页面的 URL 加上 redirect 刷广告流量,这样不就坏事儿变好事儿了吗?
    nnnToTnnn
        62
    nnnToTnnn  
       2019-07-29 09:14:20 +08:00
    e....... 不就是反爬虫么? 这个很简单啊,直接上 google 的点一下就行了
    wongyusing
        63
    wongyusing  
       2019-07-29 11:00:43 +08:00
    你单纯的反爬,其实没有什么意义。
    爬虫是没有办法反的。迟早会被有志之士爬取。
    这样问你吧。
    你这个小程序是什么类型??
    小游戏??
    新闻??
    还是说文章??
    1044523901
        64
    1044523901  
       2019-07-29 11:33:31 +08:00
    @Greatshu 哈哈
    Aether
        65
    Aether  
       2019-08-26 16:32:01 +08:00
    @jianshou 这才是好主意……厉害。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3358 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 13:40 · PVG 21:40 · LAX 06:40 · JFK 09:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.