性能优化是把双刃剑,有好的一面也有坏的一面。好的一面就是能提升网站性能,坏的一面就是配置麻烦,或者要遵守的规则太多。并且某些性能优化规则并不适用所有场景,需要谨慎使用,请读者带着批判性的眼光来阅读本文。
批量优化
开关:-o
设置这个开关表示隐含开启下面对应的选项和开关:
--keep-alive
--null-connection
--threads=3
默认值,可以设置更大值。
查看下面内容获取更多关于开关设置的详情。
HTTP Keep-Alive持久化连接
在早期的HTTP/1.0中,每次http请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接。在后来的HTTP/1.0中以及HTTP/1.1中,引入了重用连接的机制,就是在http请求头中加入Connection: keep-alive来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流。协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive,而HTTP/1.1默认是支持长连接的,有没有这个请求头都行。
开关:--keep-alive
这个开关参数设置 sqlmap 使用 HTTP(s) 持久化连接。值得注意的是,这个开关不能够和 --proxy
一起使用。
HTTP NULL 连接
开关:--null-connection
在 HTTP 请求中,存在可以获取 HTTP 响应大小而无须获取整个 HTTP 实体的特殊类型。这个技术可用于 SQL 盲注中,以区分响应结果是 True
还是 False
。如果开启了这个开关,sqlmap 会测试并利用两种不同的 NULL 连接技术:Range
和 HEAD
。如果目标服务器能够满足其中之一的请求方式,那将能够减小使用的带宽,加速整个测试过程。这些技术的相关详情可见白皮书提升 SQL 盲注的性能——Take 2(带宽)。值得注意的是,这个开关不能和 --text-only
一起使用。
并发 HTTP(S) 请求
选项:--threads
sqlmap 中支持设定 HTTP(S) 请求最大并发数。
这个特性依赖于多线程,因而继承了多线程的优点和缺陷。当数据是通过 SQL 盲注技术,或者使用暴力破解相关开关获取时,可以运用这个特性。对于 SQL 盲注技术,sqlmap 首先在单线程中计算出查询目标的长度,然后启用多线程特性,为每一个线程分配查询的一个字符。
当该字符被成功获取后,线程会结束并退出——结合 sqlmap 中实现的折半算法,每个线程最多发起 7 次 HTTP(S) 请求。考虑运行性能和目标站点的可靠性因素,sqlmap 最大的并发请求数只能设置到 10。值得注意的是,这个选项不能跟 --predict-output
一起使用。