V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
LeeReamond
V2EX  ›  奇思妙想

关于使用非对称计算进行反爬虫的思路

  •  
  •   LeeReamond · 2022-03-08 08:15:15 +08:00 · 3702 次点击
    这是一个创建于 1020 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前工作暂时不需要处理反爬虫需求,以前曾经有过,估计以后也会有,反爬是互联网一个永久的话题,以下纯属白日瞎想,与 v 友讨论一下:

    昨天想到关于 cloudflare 的五秒盾,印象里听别人说过他是通过一个复杂计算,让前端证明确实跑了这么多计算,所以理论上没有任何人可以绕过这部分工作。如果我们平常也在自己的应用里植入一个类似的,但除了初次打开页面需要等待以外,其他的时候可以让网页在用户浏览网页时后台计算,这样正常用户使用的话,人类很少有打开一个页面只看五秒的情况,五秒过后浏览器已经准备好了结果可以直接打开下一个页面,可以做到用户端无感知。对于爬虫来说则可以限制其爬虫效率不得超过其计算效率的最大值,应该对于灰产来说还是一件稍麻烦的事情,对于数据频繁更新的应用限制效率后爬虫获取数据的价值也会降低很多。

    理论上进行的计算最好是非对称式的,比如前端要算个几秒钟,但后端验算只需要一瞬间的那种,后端无需支付代价即可限制爬虫的效率。关于计算内容可以即时从后端申请,防止用户端预计算。这种改装应该对于后端来说很轻松。但关于计算内容以我粗浅的数学知识实在是想不到什么好主意,理论上这个东西要难于计算,但易于验算,最好还可以方便地调整问题复杂度。。。百度搜了搜非对称计算,结果搜到的无一例外全是 RSA 相关的内容,但 RSA 使用的算法我想了想似乎对于本命题并无太大借鉴意义。其他能想到的比较难算但易于验算的任务,比如找大质数之类的,问题在于虽然大质数找起来很费劲,但验算起来开销同样很高。。而且不是很方便控制计算复杂度,比如网站有时候需要 5 秒计算,被攻击时可能需要 10 秒,其他时候可能需要 2 秒,这就很难调整了。。

    v 友们又和想法?

    17 条回复    2022-03-08 23:33:38 +08:00
    murmur
        1
    murmur  
       2022-03-08 08:16:22 +08:00
    爬虫本来就可以做 headless 啊,没有界面的浏览器
    t123yh
        2
    t123yh  
       2022-03-08 08:25:55 +08:00 via Android
    这个用哈希就行了,类似比特币挖矿的原理。服务器生成一个随机字符串,用户需要在这个随机字符串后面另外加一个随机字符串,并且计算拼接后字符串的哈希值,要求哈希值开头有 n 位为 0 。通过调整 n 就可以调整难度。
    kisshere
        3
    kisshere  
       2022-03-08 08:30:03 +08:00   ❤️ 5
    前端搞复杂计算???你不怕杀毒软件报你网页挖矿?
    xiao109
        4
    xiao109  
       2022-03-08 08:38:47 +08:00
    用户:这破网站咋这么耗 CPU 呢?下次不来了
    0o0O0o0O0o
        5
    0o0O0o0O0o  
       2022-03-08 08:45:27 +08:00 via iPhone
    我建议做反爬的可以先大致了解或者实践反反爬
    siweipancc
        6
    siweipancc  
       2022-03-08 09:22:35 +08:00 via iPhone
    第二天偷偷更新成一半挖矿一半解密
    dingyaguang117
        7
    dingyaguang117  
       2022-03-08 09:34:57 +08:00 via iPhone
    参考比特币挖矿,hash(时间戳+随机数) 结果末尾 n 个 0 的为成功。
    3dwelcome
        8
    3dwelcome  
       2022-03-08 09:41:52 +08:00
    以前有个冷门系统叫 freebsd ,为了防止用户登录密码被高频暴力破解,也是用消耗用户 CPU 资源的办法来限制频率。

    他们发明了 MD5 加密算法,就是 MD5 自我循环计算 1000 次取结果。

    结果你知道的,都是自欺欺人。
    locoz
        9
    locoz  
       2022-03-08 09:47:32 +08:00 via Android
    这种操作除了降低用户体验以外,其实起不到什么反爬的作用…你以为 cloudflare 的五秒盾是反爬,但其实那个是反 cc 攻击的,从一开始就搞错了。

    爬虫并不需要担心算力的问题,并发量和速度没那么高的要求,面对这种操作很无所谓的,随便就算掉了。如果量确实大,实在不行大不了也就是搞几台家用级的高配置电脑起个计算服务专门跑这个计算,成本还没这种场景下的 IP 费用高,从提高爬虫方成本角度的考虑也起不到啥显著作用。
    czfy
        10
    czfy  
       2022-03-08 09:51:59 +08:00   ❤️ 1
    其实反爬之所以那么麻烦,是因为要有两步:
    1. 识别爬虫和正常用户
    2. 提高爬虫的访问成本,且不提高正常用户的访问成本

    第 1 步有难度,第 2 步难度更大
    Opportunity
        11
    Opportunity  
       2022-03-08 10:07:42 +08:00
    关键词 proof of work
    est
        12
    est  
       2022-03-08 10:11:11 +08:00
    楼上 @Opportunity 说得对。LZ 这个想法就是 POW 。有个防止 DoS 的服务叫 Hashcash 。

    后来一个叫中本聪的人收到启发,用 POW 结合 merkle tree 发明了 Bitcoin
    unclemcz
        13
    unclemcz  
       2022-03-08 10:53:50 +08:00
    前端浏览器能做的,后端都能模拟出来,所以现在反扒都是从浏览器前人的行为出发,人的行为比较难模拟。
    lawler
        14
    lawler  
       2022-03-08 11:23:32 +08:00
    这不就是...计算型验证码...么?
    随便出个复杂计算,3 秒内提交,都算爬虫。例如 46*163/13*141+156=?
    justs0o
        15
    justs0o  
       2022-03-08 14:27:18 +08:00
    你这是反爬么,完全不搭噶
    AkashicRecords
        16
    AkashicRecords  
       2022-03-08 17:09:19 +08:00
    事实上,LZ 描述的就是工作量证明 Pow 。而工作量证明最早就是用于防止垃圾邮件的。
    LeeReamond
        17
    LeeReamond  
    OP
       2022-03-08 23:33:38 +08:00
    @kisshere 我很久没用杀毒软件,不知道现在杀毒软件还能侵入浏览器查毒?


    @t123yh
    @dingyaguang117
    @est 比特币的那个 pow 有个问题就是太陡峭了难以控制,比如我想控制用户发出每个请求前平均计算 1s ,就比较困难
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:44 · PVG 02:44 · LAX 10:44 · JFK 13:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.