All Projects → webcoding → js_block

webcoding / js_block

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

Programming Languages

HTML
75241 projects
javascript
184084 projects - #8 most used programming language
CSS
56736 projects

Projects that are alternatives of or similar to js block

ad-rules
自用广告屏蔽规则
Stars: ✭ 20 (-66.1%)
Mutual labels:  block-ad
PTT Beauty Spider
PTT 表特版爬蟲圖片下載器
Stars: ✭ 47 (-20.34%)
Mutual labels:  spider
get LibSeat
利昂图书馆预约系统自动预约&签到程序。支持包括中国人民大学、北京师范大学、济南大学、哈尔滨工业大学等在内的38所高校的图书馆系统
Stars: ✭ 39 (-33.9%)
Mutual labels:  spider
TikTokDownloader PyWebIO
🚀「Douyin_TikTok_Download_API」是一个开箱即用的高性能异步抖音|TikTok数据爬取工具,支持API调用,在线批量解析及下载。
Stars: ✭ 919 (+1457.63%)
Mutual labels:  spider
MoMo
利用墨墨背单词的分享功能拿每日20个的单词上限奖励(多线程
Stars: ✭ 45 (-23.73%)
Mutual labels:  spider
Tieba-Birthday-Spider
百度贴吧生日爬虫,可抓取贴吧内吧友生日,并且在对应日期自动发送祝福
Stars: ✭ 28 (-52.54%)
Mutual labels:  spider
scraper
图片爬取下载工具,极速爬取下载 站酷https://www.zcool.com.cn/, CNU 视觉 http://www.cnu.cc/ 设计师/用户 上传的 图片/照片/插画。
Stars: ✭ 64 (+8.47%)
Mutual labels:  spider
yutto
🧊 一个可爱且任性的 B 站视频下载器(bilili V2)
Stars: ✭ 383 (+549.15%)
Mutual labels:  spider
bangumi yearly report
No description or website provided.
Stars: ✭ 24 (-59.32%)
Mutual labels:  spider
ZUCC ZhenFangHelper
正方教务管理系统学生版的自动登录、选课、信息获取
Stars: ✭ 36 (-38.98%)
Mutual labels:  spider
feaplat
爬虫管理系统,支持集群,弹性伸缩。支持运行feapder、scrapy、selenium、playwright等各种框架及脚本
Stars: ✭ 42 (-28.81%)
Mutual labels:  spider
DSpiderDemo-Android
客户端爬虫安卓端demo
Stars: ✭ 43 (-27.12%)
Mutual labels:  spider
ComicSpider
动漫之家漫画站电脑版原图爬虫
Stars: ✭ 67 (+13.56%)
Mutual labels:  spider
small-spider-project
日常爬虫
Stars: ✭ 14 (-76.27%)
Mutual labels:  spider
scripter
一些脚本和工具
Stars: ✭ 20 (-66.1%)
Mutual labels:  spider
crawlerdetect
Golang module to detect bots and crawlers via the user agent
Stars: ✭ 22 (-62.71%)
Mutual labels:  spider
fetchurls
A bash script to spider a site, follow links, and fetch urls (with built-in filtering) into a generated text file.
Stars: ✭ 97 (+64.41%)
Mutual labels:  spider
zhihu-crawler
徒手实现定时爬取知乎,从中发掘有价值的信息,并可视化爬取的数据作网页展示。
Stars: ✭ 56 (-5.08%)
Mutual labels:  spider
job-spider
多线程爬取互联网行业常用招聘网站
Stars: ✭ 28 (-52.54%)
Mutual labels:  spider
Bilibili manga download
带图形界面的哔哩哔哩漫画下载工具
Stars: ✭ 52 (-11.86%)
Mutual labels:  spider

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,然后运行文本框代码即可。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].