现在前端反爬虫,还有办法检测出来是不是无头浏览器吗?

2021-04-05 02:47:46 +08:00
 LeeReamond

如题,前两天看论坛里一个老哥说了几种无头跟正常用户不一样的特征,今天搜了一些信息仔细了解了一下,感觉似乎随着 chromedriver 升级,原先检测区别的特征全都消失了,现在的 headless 跟普通用户几乎是完全一样的。唯一区别可能是 navigater 里 webdriver = ture,但是这点也可以通过简单的方式修改。

现在还有靠谱的反爬虫方式吗?还是只能靠接入验证码一类的服务。像淘宝那样的,正常用户用着用着都会卡,才是现在唯一靠谱的反爬虫方式?

2991 次点击
所在节点    问与答
19 条回复
jim9606
2021-04-05 06:06:45 +08:00
前端特征检测永远有被骗的可能,只能提高爬虫成本。
有一种方法是引入 HashCash PoW 机制,增大爬虫计算成本,不过还是需要一个坚实的后端做验证。
LeeReamond
2021-04-05 06:44:10 +08:00
@jim9606 简单查了一下 pow,感觉是个挺有意思的机制。不过似乎不太好实现,一个简单的方法是后端找一个随机数,生成 hash,告诉前端 hash 的结果和随机数大概的生成范围,让前端用穷举法算出原始数值。这种实现有两个问题,一个是前端算力不同,不同用户访问同一个网页可能有的人 0.5 秒就算完了,有的人 5 秒钟也算不完,比较影响体验。

再一个是这种没法在单次连接里验证,需要发起两次连接。后端需要处理多连接状态同步的问题,其实也提高了后端成本,感觉不是很划算。不过应该是确实能有效提高爬虫成本,是一个有意思的思路
feiniu
2021-04-05 08:22:32 +08:00
我感觉,阿里的云盾,是真的牛批
renmu123
2021-04-05 08:28:23 +08:00
之前看到过一种手动是检查鼠标轨迹,不过需要把这个判断逻辑好好隐藏起来,不然被发现后还是有可能被破解
LeeReamond
2021-04-05 08:55:52 +08:00
@renmu123 不太容易实现,打开 A 页面的同时需要根据鉴定是否为爬虫,决定是否返回正确信息,此时 js 脚本刚刚加载。想实现只能保留 B 页面执行的结果,并让这个结果不随页面刷新改动,可能整个网站都要用 ajax 异步加载的方式才能做,成本太高了。
BeautifulSoap
2021-04-05 10:25:45 +08:00
无脑简单点那就加个 recaptcha v3
Dreax
2021-04-05 11:06:47 +08:00
CF 最近刚好上线了 [Super Bot Fight Mode]( https://blog.cloudflare.com/super-bot-fight-mode/)
3dwelcome
2021-04-05 13:44:25 +08:00
以前千里码有道题,就是页面反爬,把页面关键数据做成图片返回,或者文字由 css 自定义字体构建,至少能避免数据被直接利用。
我写爬虫,就是正常开个隐藏浏览器,用 GoogleDevP 协议里 websocket 来控制鼠标,操作 DOM,对前端真是无感知。就连 webdriver 都检测不出来。
tsutomu
2021-04-05 14:40:44 +08:00
前端有些操作在无头浏览器中无法直接运行,比如截图录制视频之类的,特征应该都很轻松进行模仿。
LeeReamond
2021-04-05 20:34:43 +08:00
@3dwelcome 隐藏浏览器怎么理解,与无头有何不同?百度没什么有效信息
LeeReamond
2021-04-05 20:35:15 +08:00
@Dreax 看起来很吊,然而都是国内用户,他这个没意义啊
3dwelcome
2021-04-05 23:15:31 +08:00
@LeeReamond 就是写个外挂人为操作窗口句柄,把浏览器给隐藏掉,和普通用户没明显差别,前端没办法检测。
而无头就是启动 chrome 时,传个 headless 参数,或者用 webdriver,多少会留下一点痕迹。
TongNianShanHe
2021-04-06 01:01:21 +08:00
@3dwelcome 之前在研究这个的时候留意到 cdp 协议,就想着有什么办法检测本地连接,目前看来不好检测呀
LeeReamond
2021-04-06 02:43:00 +08:00
@TongNianShanHe 确实,大部分时候作为开发者都是不希望自己数据被爬取的,写博客之类的当然随便,商业应用通常贵在数据
lusi1990
2021-04-06 08:01:24 +08:00
搜下浏览器指纹,这个更靠谱。
要隐藏浏览器的无头模式,对客户端来说只要一句话。
TongNianShanHe
2021-04-06 08:59:22 +08:00
@tsutomu 不啊,我用 puppeteer 可以自动授权摄像头和录音,况且这么做涉及用户的隐私,不太可行
TongNianShanHe
2021-04-06 09:29:39 +08:00
@LeeReamond 其实反爬虫做到一定程度就不需要再做了(边际效应)
tsutomu
2021-04-06 21:06:00 +08:00
@TongNianShanHe 录制浏览器内容,不是视频。。。
TongNianShanHe
2021-04-06 21:15:55 +08:00
@tsutomu 那就不太清楚了,下次折腾的时候试一试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/768044

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX