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

想到一个前端加密对付爬虫的方案,不知道有没有可行性

  •  
  •   renmu · 37 天前 via Android · 2636 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在一些关键接口增加前端加密,加密代码由服务端返回,代码混淆人类无法正常读取。



    这时候制作爬虫的一般会选择采用 eval 执行来获取加密后的参数,可以尝试在这段加密的代码中投毒,包括但先不限于删库等操作
    34 条回复    2024-03-29 14:13:53 +08:00
    fpk5
        1
    fpk5  
       37 天前   ❤️ 8
    恭喜你重新发明了木马
    hronro
        2
    hronro  
       37 天前
    你说你要投毒, 你怎么区分正常用户和爬虫? 还是说你正常用户也投毒?

    另外 JavaScript 虚拟机的一大优势就是 sandbox 隔离, 你说的投毒, 其实基本不太可能能成功
    phrack
        3
    phrack  
       37 天前 via iPhone
    确实是个攻防手段。不过魔也可以高一丈,sandbox 你这段代码就行了
    drymonfidelia
        4
    drymonfidelia  
       37 天前   ❤️ 1
    想太多了,专业的爬虫团队都是上 AST 直接分析语法树提取算法,根本不可能执行你的代码
    streamrx
        5
    streamrx  
       37 天前 via iPhone   ❤️ 1
    没有用 只要逆向的收益足够大 就 100%会被破解。没有任何方法能预防 各种手段都只是增加逆向的难度罢了
    renmu
        6
    renmu  
    OP
       37 天前 via Android
    我知道 sandbox 可解,但只要成功一次就足以恶心到人
    算法是由服务端返回的,目的就是诱导爬虫使用 eval 执行代码,绝大多数爬虫是不会每天分析你的算法的
    heliumjt
        7
    heliumjt  
       37 天前
    我自建的一个 RSS 源就是直接 eval 了__NUXT__全局变量来获取数据,确实担心过安全风险。不过是大公司的网站,应该没问题……的吧?
    kdwnil
        8
    kdwnil  
       37 天前 via Android   ❤️ 1
    恶不恶心爬虫我不知道,但我知道万一检测组件出 bug 导致翻车会恶心到普通用户,还会有机会触发一个叫入侵计算机系统罪的口袋。与其花大成本折腾自己可能找个靠谱的律所到处发函更实在……
    renmu
        9
    renmu  
    OP
       37 天前 via Android
    @heliumjt 我也是这么干的(笑)
    cherryas
        10
    cherryas  
       37 天前
    想像里什么都有,动态加密+动态混淆+各种环境检测+代码量大到人类无法正常读取,基本都是知名的专业安全团队才能做到。
    dhb233
        11
    dhb233  
       37 天前
    反爬没有一劳永逸的办法。你不管怎么做,如果有足够的利益,人肉爬数据你怎么防?
    renmu
        12
    renmu  
    OP
       37 天前 via Android
    @dhb233 我只是随便提了一种方法,使用沙盒就能处理这个方案,标题也没写“一劳永逸防爬虫”
    Motorola3
        13
    Motorola3  
       37 天前
    没屁用 防一防脚本小子
    lichdkimba
        14
    lichdkimba  
       37 天前   ❤️ 2
    无头浏览器直接取页面上显示的不就行了
    dhb233
        15
    dhb233  
       37 天前
    @renmu 我也没说这个方法不行啊。。。爬虫和反爬虫是互相对抗的,能不能防住,得上了才知道,你哪知道别人在用什么技术爬你的网站。就算今天能防住,可能明天又防不住了
    weeei
        16
    weeei  
       37 天前
    知乎使用特殊字体反爬虫,眼睛看的内容是正常的,爬下来的文本是乱序的,使用特殊字体控制能正常渲染。
    devswork
        17
    devswork  
       37 天前
    控制浏览器 + OCR (结构识别),怎么对付?
    proxychains
        18
    proxychains  
       37 天前 via Android
    css 漂移?
    eber
        19
    eber  
       37 天前
    @devswork 你这个方案更狠,我想了一下好像无解!!!😂
    seWindows
        20
    seWindows  
       37 天前   ❤️ 1
    逻辑炸弹 2.0 版本?

    如果检测组件出 bug 导致翻车会恶心到普通用户,起码会被曝光:“安全警告:xxxx 网页挂病毒木马,大家不要访问"。等等
    drymonfidelia
        21
    drymonfidelia  
       37 天前
    @devswork
    @eber
    采集上报全部鼠标键盘触摸传感器数据,ai 模型分析,不通过就故意拖慢响应或者 ban JA3 指纹 1 天
    akamai bot manager 就是这么做的,仍然一堆服务能打码
    shuimugan
        22
    shuimugan  
       37 天前 via Android
    Deno:?
    drymonfidelia
        23
    drymonfidelia  
       37 天前
    另外 akamai 已经能精准识别 curl_cffi 了,20 个请求内 100%封,要用魔改版本的 tls_client ,原版 tlsclient 也不行
    tool2d
        24
    tool2d  
       37 天前
    youtube 就是,那个视频签名算法是写在 js 里的,挺复杂,我也看不懂,用 eval 来调用求解。

    算法经常变,我都有收集官方一大堆 js 代码了。

    bytebuff
        25
    bytebuff  
       37 天前
    这种想法还比较初级,现在都用 VMP 混淆代码,后台服务器更新操作位;依然被破解;
    locoz
        26
    locoz  
       37 天前   ❤️ 1
    你说的这种做法叫投毒/埋坑,属于早就被玩烂的操作了。

    常见的操作有比如先获取一些浏览器环境中获取不到的信息,用于检测是否是真实浏览器,然后如果不正常就在生成的 sign 里打上特殊标记,或者是发个网络请求直接上报具体的环境信息,或者是打日志警告,或者是执行一些计算量超出正常水平的东西再执行原始逻辑之类的。玩法一堆,而且远比“删库”能恶心人。

    “删库”这种极端操作的成功概率基本为 0 ,你也无法保证你不会影响到普通用户,再加上大点的安全厂商都会有做自动化的安全审计,检测到你搞骚操作就直接就给你标记风险了,毕竟谁知道你是想做防护还是想搞普通用户呢?

    另外,你以为这种操作很无解,代码混淆了没人仔细分析就看不懂,但其实解析成 AST 之后处理一下冗余内容,代码结构是很清晰的。再加上现在的大语言模型上下文长度已经足够长了,能力完全够将清理后的逻辑部分代码还原出大致的原始状态,或者是直接按要求对代码进行自动化处理。无论是剥离出实际需要的部分,还是察觉出你整活,都极其简单,门槛极低。以前还得专门训练模型,现在花点小钱随便就能搞。

    所以可以说在当下,在中低程度混淆处理的代码层面投毒/埋坑的意义已经不大了,代码层面的对抗主要还是在让别人无法正常分析代码上,比如几年前比较先进的技术是套一层“虚拟机”,逻辑完全按人家自己的来,后面发展出了基于 WASM 直接跑加壳后的编译后程序,再后面就是像楼上说的结合动态变化的处理方式高频更新。但是这些操作终究是前端代码层面做的事情,大不了别人完全虚拟一套环境搞,只要级别比你高,你代码里做再多操作也看不出毛病。

    如果你平时有了解一些相关安全厂商做的事情的话,你会发现其实他们现在都在往行为风控方向发展。以前他们都会吹自己的验证码、WAF 之类的产品有多难被破解,代码加密、动态更新、高强度壳啥的。现在吹的都是通过识别客户端各方面的操作是否像真人发出的,然后进行分级风控,比如疑似风险客户端就必须要进行计算后才能走正常逻辑,通过大幅加高攻击方成本的方式来解决问题。
    locoz
        27
    locoz  
       37 天前
    还有像前面 @drymonfidelia 说的采集上报各种传感器数据做识别这种做法,理解不了的话可以去看看字节跳动的产品,抓包会看到大量向 mcs.zijieapi.com/list 这个地址上报的数据,内容细致到可以跟录屏一样完全回放你在使用时的整个操作过程和你操作时应该看到的状态。

    这种程度的数据用在防护上,想要精准识别出是人还是机器操作,又或者是直接只请求了特定接口搞事情,都是很容易做到的,就看想不想管而已。
    renmu
        28
    renmu  
    OP
       37 天前 via Android
    @locoz 学到了
    1018ji
        29
    1018ji  
       37 天前
    ttimasdf
        30
    ttimasdf  
       36 天前
    没用。你压根就没理解安全攻防的本质。就是资源的对抗。

    说白了就是比谁更菜。搞安全和打电竞一样,菜就是原罪。

    你了解你的对手吗?你防的是谁?他们的能力是什么样的?你的业务数据值得对方投入多大的资源?他们有这样的资源吗?你能投入多少开发资源去做防护?

    从开发视角、技术视角出发去搞安全,最后迎接你的就是领导一句,你搞这些没用的玩意干啥?干嘛不花钱找外包干?你干的就比别人好了?
    llsquaer
        31
    llsquaer  
       36 天前
    @devswork 知乎现在搞字体混淆了??
    EndlessMemory
        32
    EndlessMemory  
       36 天前
    反爬最有效的手段就是给进攻方增加工作量,你把参数每天变来变去都比这个有效
    lozzow
        33
    lozzow  
       36 天前
    我觉得最简单的反爬手段就是线下反爬
    naythefirst01
        34
    naythefirst01  
       29 天前
    除了代码投毒 可以参考 boss 的反爬 思路类似
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2688 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:38 · PVG 18:38 · LAX 03:38 · JFK 06:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.