V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

有没有什么简单好用的反爬虫办法?

  •  
  •   LeeReamond · 2021-01-30 22:26:36 +08:00 via Android · 3061 次点击
    这是一个创建于 1393 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,以前没认真研究过反爬虫的问题,因为站点日活少,并不感觉会被攻击或其他,但是最近想到这个问题,我个人水平十分业余,问一下各位大佬有没有什么 common practice

    我个人的爬虫使用经验中,主要有几类反爬措施,

    其一是使用 refer,判断 clientagency 这种比较原始的方式,

    其二是将页面套在 iframe 中进行懒加载

    其三是类似 pixiv 最近几年的操作,登录时接入了一个某某反爬业务,前端 js 会生成一些东西,非模拟登录很难得到这些数据

    对我个人而言,因为我也不是专门做爬虫的,通常反爬如果达到第三层,就会拦住我。

    =====

    我目前感觉可行的有效反爬办法如下(基于 spa,有权限验证,但这并不妨碍直接调用数据接口)

    一是部署时限制接口访问频次,比如短期大量访问后暂时屏蔽。

    二是检验 refer

    三,也是我想问的,前端有没有一些好用的工具,可以实现强制用户如果想爬虫也必须使用模拟客户端?比如混淆过的 js 代码生成一些 hash 之类的。

    后端又如何对其合法性进行验证呢
    第 1 条附言  ·  2021-01-31 00:16:49 +08:00
    贴个条,可能帖子里没说太清楚,我希望达到的效果并不是完全反爬,只是强迫用户使用模拟登陆,提高爬虫成本就可以了。我有限的爬虫经验里用模拟登陆可以解决大多数问题,无法解决的次数一只手数得过来,我不准备做到这种程度,成本太高,没有意义
    20 条回复    2021-02-01 12:08:08 +08:00
    wunonglin
        1
    wunonglin  
       2021-01-30 22:56:05 +08:00
    没有。

    搞那么多花里胡哨的,只要不需要手工验证,用 chromedp 都能给你爬没咯
    ijrou
        2
    ijrou  
       2021-01-30 23:29:45 +08:00
    看你这么问,我只能说:没有
    如果是大牛,,,,办法很多,,,但也不是完全反爬。。
    imgbed
        3
    imgbed  
       2021-01-30 23:35:46 +08:00
    用户打开网页先来个图灵测试再显示内容
    favourstreet
        4
    favourstreet  
       2021-01-31 00:00:47 +08:00 via Android
    不加区分地随机把一部分请求的响应时间拖长十秒,我相信爬虫永远不会比用户有耐心。
    fiveelementgid
        5
    fiveelementgid  
       2021-01-31 00:08:01 +08:00 via Android
    没有,selenium+Chrome driver 在浏览器一级模拟,根本没办法
    RECAPTURE of Google 除外(
    systemcall
        6
    systemcall  
       2021-01-31 00:11:35 +08:00   ❤️ 9
    注册的时候要手持 sfz,浏览必须得短信登录,看到一半就要求用户下载 App,电脑上面的话就让用户扫码下载。App 要求各种权限来做设备指纹,不给权限就闪退,设备指纹觉得有问题就封号,没问题的话时不时短信验证一下,之后摄像头偷拍几张做人脸识别,有问题就封号
    实在要做 pc 版,就偷偷读一下用户的浏览记录,浏览记录和之前的用户画像差的大了就标记一下,让用户转到手机上用。时不时录下屏、扫下进程、分析一下局域网设备,觉得不对劲就把用户赶到手机 App
    把那些恶心人的技术都加上去就行了
    LeeReamond
        7
    LeeReamond  
    OP
       2021-01-31 00:18:29 +08:00
    @systemcall 我明白了,百度才是反爬届的大哥大!
    Jhonohn
        8
    Jhonohn  
       2021-01-31 00:46:31 +08:00 via Android
    每次登陆付费 0.1,登陆成功后 1 分钟返 0.1,让支付宝帮你验证对方是不是爬虫
    locoz
        9
    locoz  
       2021-01-31 00:59:24 +08:00
    如果你只是想要提高爬虫的成本,那你就把所有东西都变成登录可见,或者核心会被爬的那些都变成登陆可见,并且提高账号注册门槛,比如简单粗暴地使用外置登录(包括但不限于 QQ 、微信、Google 等),这样就可以快速将门槛提升到新手和一般水平的人没法好好爬的程度了。

    另外,如果是商业性质的东西,你还可以加那种 Web 防火墙,自带的防 CC 攻击功能就能挡住很多一般水平的,花钱买专门的反爬虫服务的话效果更佳。
    LeeReamond
        10
    LeeReamond  
    OP
       2021-01-31 02:24:02 +08:00
    @locoz 是这样,如果用登录限制的话,就像现在这样,不排除有认证用户爬取数据的嫌疑,因为本身就是提供数据服务的,对方对数据有兴趣也并不奇怪。比如现在的 jwt 登录策略,只需要拿到 token 之后就可以退出模拟了,感觉成本并不是很高。防 CC 的话感觉,因为我们现在 nginx 已经设置了一个比如一秒访问一次的频率,最多也是每分钟被访问 60 次,这种频次应该离攻击还远,不会被挡。
    LeeReamond
        11
    LeeReamond  
    OP
       2021-01-31 02:27:47 +08:00
    @locoz pixiv 那个应该就是专门花钱买的反爬虫服务,我印象中几年以前,大概三四年以前,pixiv 的登录接口我自己是可以搞定的,然后到一两年前有需求的时候看了一眼发现搞不定了,似乎接入了谁家的反爬服务,但是 github 上还是开源了不少破解的东西。我感觉这样一来的话不如自己实现了,反爬做的再严密,数据价值到位总归有人会破开,不如自己做个简单点的原型,可以拦截 99%的菜鸟
    johnsona
        12
    johnsona  
       2021-01-31 05:13:10 +08:00
    发现异常 ip,投毒,对方要找出有毒的,要再来一遍
    lichdkimba
        13
    lichdkimba  
       2021-01-31 05:35:52 +08:00
    @favourstreet 爬虫才有耐心吧。。。。。都是机器
    Atom931989614
        14
    Atom931989614  
       2021-01-31 09:38:29 +08:00 via iPhone
    @Jhonohn 用户跑没了
    paradoxs
        15
    paradoxs  
       2021-01-31 10:16:36 +08:00
    爬虫越难进,普通的用户也越难进。

    爬虫不会没 ,但是用户会没。
    nswdhy
        16
    nswdhy  
       2021-01-31 12:54:40 +08:00
    用 webfont 替代部分文字呀,他爬去的就是残缺不全的一些文本。
    zuiluo
        17
    zuiluo  
       2021-01-31 14:06:21 +08:00
    写了很久的爬虫的来说说,想反爬,增加爬虫成本的几个步骤

    接第三方安全认证,域名走他们的安全认证,再重定向回来,否则不能访问(自己找开源库写也行,浏览器指纹认证,一系列验证码都加上去 /js 强力混淆 /接口字段名混淆 /...)

    IP 请求频率要限制死,超过正常频率直接封;(当然不要封太久,防止误伤)

    文本数据做字体加密,字体文件每次访问都不一样

    用户鼠标轨迹做认证,前端必须定时提交(可以找第三方服务来认证识别,不然自己训练基本可用模型识别太麻烦了),否则封

    这一整套搞上去,安全认证和验证码三天两头改一次,还没爬的基本直接放弃,已经爬的很快就受不了了。
    wzzzx
        18
    wzzzx  
       2021-01-31 15:45:43 +08:00
    定期随机更改数字字段呢 验证码也是随机更改
    hxse
        19
    hxse  
       2021-01-31 16:33:54 +08:00
    1. 不要用网页
    2. 把 text 转成 canvas, 做好混淆和加密
    sess222
        20
    sess222  
       2021-02-01 12:08:08 +08:00
    天猫国际的反爬就很好弄,限定每个实名账户一次性可访问 40 页,超过 40 页就要滑动验证码,再划十页直接把你 BAN 了。。。爬虫有啥用,你真人上去都不行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2694 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:41 · PVG 18:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.