Skip to content

webcoding/js_block

Repository files navigation

js_block

研究各种拦截:反爬虫、拦截广告、防止脚本注入或广告注入(防XSS)、斗黄牛等各种功能研究

nodejs 实现反爬虫

学习 http://geek.csdn.net/news/detail/85333

感谢作者的分享,还不知道他大名呢,因为之前也在思考这个问题(思考过加密解密,但由于前端源码可见,我们未做实施,这里给了很好的策略-即使加解密手段可见,但需要花费一定精力处理,而且反爬虫可以工作量少,而做爬虫工作量多,于是方案才具备可行性),当然我们不是针对反爬价格这种需求,而是反黄牛砍价这种需求,而且后台也不是前端技术,这次分享是较成熟的方案。

关键思想

爬虫必须执行一下js 代码,才能取得动态 key,爬虫实现执行 js 的模拟环境(模拟真实浏览器)成为破解的关键。

关键的几个学习点,

  • eval 方式让对方难破解
  • 可以阿拉伯语言混淆
  • 最关键还是实现猥琐而且其能自圆其说。关键说法是,我们加班少,对方加班多,人力成本等各种说法,这让实现得到价值体现!!!

反爬虫方法:

  • a 修改 url
  • b 修改 key
  • c 动态 key
  • d 复杂动态 key(需计算)
  • e 更复杂动态 key(引入加密解密,算法随机)

除此之外,还可以引入 浏览器和 node 环境差异,来反 node 爬虫。最关键的是,后台的随机算法,我们时不时地变更;或者时不时新增一两个环境差异变量区别

进一步复杂化,做浏览器检测

  • 检测 IE 的 bug
  • 检测 FF 的严格 innerText()
  • 检测 Chrome 的强大特性 画个图 css3动画

破解之法 —— 能否一法破万法

所有的加密、混淆等等各种处理,都不能影响正常浏览器的渲染,然后呢,如果在一个正常浏览器的环境下,获取数据或请求 ajax,那么,以上所有的反爬虫手段失效(jsDom PhantomJS CasperJS cheerio 有些可以有些不可以,这里不说了)

但如果是我来做爬虫,而且知道了对方使用了此种技术,呵呵,那我肯定会想到这种方法,肯定能解决他。而从发爬虫的角度来考虑,这里要辅助封 IP、浏览器相同特征检测、黑名单等各种手段同时使用才能凑效。如此来看,各种技术综合在一起,效果才最大,如此难度等级一步步提高上来,初级爬虫就全死掉了,而对高级爬虫的博弈,则是一场持久战。

试想的一法破万法的手段,大批的 IP 地址随机用,node 环境下真实模拟各种浏览器客户端(具备浏览器功能、环境变量、且 UA 随机可变,此时在处理ajax 请求时,封装起来,不让其访问 node 环境变量),也许就可以了,如果他要求属性检测——做个动画呢,这难度又提高了,于是终极手段,就要直接操作真实浏览器了,把任务丢给他。如此,解决 UA 变化的问题,以及 IP 地址问题,就可以了(理论上可行的)。实现难度上去了,值得与否看各自需求啦。

而事实上,反爬虫的手段,还有两点在上面没提到:

  • 在斗黄牛的分析中,也提到用户行为分析,判断人与机器行为的差异,也能做一定的反爬虫工作
  • 针对一个Api接口的处理,其逻辑再关联到另一个接口,取有效数据的过程,必须要分析代码(否则只能取 dom 数据——效率会变得很低),此时,混淆就会起很大作用,这时搞个阿拉伯语的混淆(这个分享内有提到),代码一会从左向右读,一会从右向左抑或从上向下,呵呵,难道提升了,抑或直接自创一个语言吧,像星际迷航里那样的。

此时我突然想到一个问题,关于地图的经纬度加密,比如百度坐标、火星坐标等,其本质上,只是对一个接口来加密,但能防住吗?这是显而易见的。

最终,这些综合方法,总是不断提升门槛。总体上我觉得应该还是防守来的容易吧。

应该搭建个服务,让大家来做攻防练习就好了,这个我去找个免费 nodejs 服务器看看。

我抓到你了——然后怎么办

  • 不去引发生产事件——直接拦截
  • 可能引发生产事件——给假数据(也叫投毒)

其他问题

  • 放水:不要全部封死,死磕两败俱伤
  • IP 被封:你没下钱,IP(几十万到100w)也就几十块钱
  • 动态/拼接验证码: 一条验证码,也就1-3分钱

问题思考?

如果我们服务器端使用的不是 nodejs,那么算法 OK 么?

答:同样OK,服务器端最终返回 jsonp 形式的字符串数据,能让客户端执行就行了。怎么维护,就只能手动维护或提供个简单管理界面,直接编辑各种加解密算法,生成对应的 jsonp 内容。

如果用在app客户端呢?

答:由于以上算法,使用加解密以及 eval,是 js 操作的过程,如在 app 中起作用,需要为其单独处理下,否则只能 webview 种处理。

其他优化:对于同一个客户端类型(各种相同参数)限制请求阈值,超过即返回服务器忙

以上反爬虫方法,同样可针对黄牛砍价行为(其最可能就是使用模拟器对 api 接口直接请求处理,如此可阻止其行为)

扩展思考

要做普适性推广,我要写很多请求任务做测试,于是出了这个需求,我在文本框写一个请求任务的代码,点运行,就可以发起一个请求任务,这样我就非常方便测试了

并且还可以增加很多任务,一块儿做,可把任务存入本地缓存中,即使刷新也不会丢失自己刚写的代码(还可以维护一个任务列表)

如此我就新建任务就很方便了。此需求实现也很简单,引入 query,然后运行文本框代码即可。

About

研究学习各种拦截:反爬虫、拦截ad、防广告注入、斗黄牛等

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy