模糊比精确更精确——判断URL是否存在 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    判断一个URL是否存在,是扫描中最简单的一种,

模糊比精确更精确——判断URL是否存在

。不过要做好,也不容易。很久很久以前,大家都比较淳朴的时候,存在即返回200,不存在返回404。这个时候的扫描器比较好做,直接判断HTTP的返回头状态码就可以了。

    现在基本上都rewrite了,很少遇见返回404错误的情况。于是常规的扫描是先生成一个随机的足够长的URL去请求服务器,得到标准的错误页面。随后遍历字典将返回的内容与标准页面对比,一致则判定为该URL不存在。这样有个问题就是很多错误页面会有一些随机化的内容,比如当前时间、当前服务器域名或者错误的URL内容等。要命的是这个不同内容各个网站是不同的,要做一个通用的扫描还有一些难度。

    于是这里引入字符串相似度判定算法,使用模糊的方式确认URL是否存在,

电脑资料

模糊比精确更精确——判断URL是否存在》(https://www.unjs.com)。简单的说,返回的页面与标准错误页面相似程度非常高,达到90%以上,我们就可以判定为这个URL是存在的。这样,问题就转化成了相似度计算了。我在《URL相似度分析》中提到过集中算法,其中“编辑距离”算法刚好可以满足这里的需求。

    做到这里,已经能够解决很多问题了,但是还不够。举个例子来说,我们有些网站请求/aaaaa时跳转到中文站主页,请求/bbbbbb时跳转到国际站主页。同样是错误跳转,但是总有一个和标准错误的页面相似度非常低,会被误报为URL存在。穷尽所有的错误页面是不可能的,那么这种情况如何解决?

    可以简单的引入返回页面长度这个指标。以标准错误页面长度作为基准长度,计算每次返回的长度相对于基准长度的变化值。一般来说,错误页面的长度和首页之类页面的长度变化还是比较大的,而中文站首页与英文站首页的长度变化则小得多。当请求一个URL得到的返回内容与标准错误页面相似度很低,并且长度变化很大时,判定这个URL存在,否则为不存在。

    误报还是有的,但是至少好了很多。

最新文章