2011-03-20 59 views
10

我需要检测我网站上的信息抓取。我尝试基于行为模式进行检测,尽管相对计算量很大,但它似乎很有前景。检测网页抓取的方式

基础是收集某些客户端的请求时间戳,并将其行为模式与常用模式或预计算模式进行比较。

为了更精确,我收集请求分为阵列之间的时间间隔,通过时间的函数索引:

i = (integer) ln(interval + 1)/ln(N + 1) * N + 1 
Y[i]++ 
X[i]++ for current client 

其中N是时间(计数)的限制,间隔大于N被丢弃。最初X和Y都填满了。

然后,当我在X和Y中有足够数量的人后,就该做出决定了。标准是参数C:

C = sqrt(summ((X[i]/norm(X) - Y[i]/norm(Y))^2)/k) 

,其中X为特定的客户端数据,Y是共同的数据,和范数()是校准函数,并且k是归一化系数,根据类型规范的()。有3种类型:

  1. norm(X) = summ(X)/count(X), k = 2
  2. norm(X) = sqrt(summ(X[i]^2), k = 2
  3. norm(X) = max(X[i]), k is square root of number of non-empty elements X

C是在范围(0..1),0表示没有行为偏差和1是最大偏差。

1类型1的校准最适合重复请求,类型2用于重复间隔很少的请求,类型3用于非常量请求间隔。

您认为如何?我会很感激,如果你会尝试这种服务。

+4

只是在搜索“scarping”的情况下,这是一个我不熟悉的术语。我认为你的意思是“刮”? – 2011-03-20 23:03:35

+1

@Martin - 'screen-scraping'已被选为标签,因此我根据该标签进行了编辑。 – slugster 2011-03-20 23:07:46

+1

我只能说:刮会永远存在。在未来,您至少应该考虑适合21世纪的商业模式。 – rook 2011-03-20 23:54:13

回答

7

说实话,你的方法是毫无价值的,因为它的平凡旁路。攻击者甚至不必编写一行代码来绕过它。代理服务器为free,您可以在亚马逊ec2上以每分钟2美分的新IP地址启动新机器。

更好的方法是Roboo它使用饼干技术箔机器人。绝大多数机器人无法运行JavaScript或Flash,这可以用于您的优势。

然而这一切“(中)security though obscurity”和唯一原因为什么它可能工作是因为你的数据是不值得就可以了程序员花费5分钟。 (包括Roboo)

+4

目标是**检测**刮,而不是阻止。 – aks 2011-03-21 08:29:20

+0

@aks如果有人知道,那么它的小事就绕过了。在这种情况下他们不会知道。使用随机间隔的 – rook 2011-03-21 16:55:43

+0

似乎会打败你的方法。 – gonzobrains 2012-07-16 17:53:35

1

我做了很多网页抓取,并且总是在每个请求之间使用多个IP地址和随机间隔。

当抓取页面时,我通常只下载HTML而不是依赖项(图像,CSS等)。所以你可以尝试检查用户是否下载这些依赖关系。

+0

这是最简单的检测方式,其中包括cookie检查,并且很明显可以实现。在这里,我尝试猜测用户活动中的异常情况。这可能会导致虚惊,无论如何,用户正在做一些事情。 – aks 2011-03-25 08:31:38

+0

这可能不适用于所有情况,因为很多浏览器都可以配置为不下载任何依赖项,除非用户点击它们(即广告拦截器,flash拦截器等)。文本浏览器也可能不下载某些依赖关系。 – gonzobrains 2012-07-16 17:52:45

+0

关于文本浏览器的好处 – hoju 2012-07-18 03:08:17

3

如果您特别要求您的算法的有效性,它并不坏,但它似乎是你过度复杂化。您应该使用WAF已经使用的基本方法来限制连接。已经存在的一种这样的算法是泄漏桶算法(http://en.wikipedia.org/wiki/Leaky_bucket)。

至于停止网页抓取的速率限制,在尝试限制连接速率方面存在两个缺陷。首先是人们使用代理网络或TOR来匿名每个请求的能力。这基本上使您的努力无效。即使是像http://www.mozenda.com这样的架子式抓取软件,也可以使用大量的IP并通过旋转来解决这个问题。另一个问题是,你可能会阻止使用共享IP的人。公司和大学经常使用NAT,您的算法可能会将他们误认为是一个人。

为了充分披露,我是Distil Networks的共同创始人,我们经常在WAF中像限速一样打孔。我们认为需要更全面的解决方案,因此需要我们的服务。