爬虫基础篇[Web 漏洞扫描器]

本文探讨了Web漏洞扫描器中爬虫的挑战,对比了QtWebkit和Headless Chrome在漏扫爬虫中的优劣。作者指出QtWebkit的限制和问题,如旧版WebKit、内存泄漏和稳定性问题,而Headless Chrome虽然较新且快速,但功能仍有待完善,需要对代码进行修改以满足扫描器的需求。文章总结了Headless Chrome是漏扫爬虫的理想选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00 前言

Web 漏扫的爬虫和其他的网络爬虫的技术挑战不太一样,漏扫的爬虫不仅仅需要爬取网页内容、分析链接信息, 还需要尽可能多的触发网页上的各种事件,以便获取更多的有效链接信息。 总而言之,Web 漏扫的爬虫需要不择手段的获取尽可能多新的链接信息。

在这篇博客文章中,我打算简单地介绍下和爬虫浏览器相关内容,爬虫基础篇倒不是说内容基础,而是这部分内容在漏扫爬虫中的地位是基础的。

0x01 QtWebkit or Headless Chrome

QtWebkit or Headless Chrome, that is a question

QtWebkit 还是 Headless Chrome,我们一个一个分析。

QtWebkit

我们先说一下在漏扫爬虫和 QtWebkit 相关的技术:

  • 使用 QtWebkit
  • 使用 PhantomJS (基于 Qt 编写)
  • 使用 PyQt (一个 Python 的 Qt bindings)

这也是我之前在 TangScan 调研 QtWebkit 系列的时候面对的技术,当时就首先就排除了 PyQt, 因为在 PyQt 中没有办法自定义 QPA 插件,如果不借用 xvfb, 是没法在没有 X Server 的服务器上跑起来的,本来 PyQt 已经够慢,再加上一个 xvfb,那就更慢了,所以直接排除 PyQt。

接着讨论 PhantomJS,PhantomJS 的优点是简单,不需要再次开发,直接使用 js 就可以操作一个浏览器, 所以 TangScan 内部的第一个版本也选择了 PhantomJS,但后面也发现了 PhantomJS 的不足。

首先 PhantomJS 可以使用 js 操作浏览器是个优点,但也必须多出一个 js context (QWebPage) 开销,而且有时候 js 的 callback 在一些情况下没有被调用。 其次我所需要的功能 PhantomJS 并没有提供,然而在 QtWebkit 中可以实现。

所以 TangScan 内部的第二版,我选择了使用 QtWebkit 来重新写一个类似 PhantomJS 的东西 (内部名为 CasterJS,AWVS 也是用 QtWebkit 写了个名为 marvin 的爬虫)。

但是直接使用 QtWebkit 还是有问题。 首先自从 Qt5.2 之后,对应的 WebKit 引擎就没有再更新过,别说支持 ES6 了,函数连 bind 方法都没有。 其次内存泄漏问题严重,最明显的情况就是设置默认不加载图片 QWebSettings::AutoLoadImages 的时候,内存使用率蹭蹭地往上涨。 最后也是最严重的问题,稳定性欠缺,也是自己实现了 CasterJS 之后才知道为什么 PhantomJS 上为什么会有那么多没处理的 issue, 这个不稳定的原因是第三方库不稳定 (老旧的 Webkit),自己还不能更换这个第三方库。 当时在 TangScan 的时候,就非常头疼这些明知道不是自己的锅、解决起来特麻烦、还必须得解决的问题。

所以如果没有其他选择,QtWebkit 忍一忍还是能继续使用下去,但是 Headless Chrome 出现了。

Headless Chrome

Chrome 的 Headless 模式在 2015-08 开始低调开发,2016-06 开始对外公开,2017-04 在 M59 上正式发布。

后来 PhantomJS 的开发者 Vitaly Slobodin 在 PhantomJS 邮件组发出了公告 [Announcement] Stepping down as maintainer, 听到这个消息我真的一点都不意外,在 TangScan 中,也是使用 Qt 从头开发起 CasterJS 的我来说, 已经受够了由于老旧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值