【问题标题】:The way to detect web scraping检测网页抓取的方法
【发布时间】:2011-07-19 07:56:34
【问题描述】:

我需要检测我网站上的信息抓取。我尝试了基于行为模式的检测,它似乎很有希望,虽然计算量相对较大。

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

更准确地说,我将请求之间的时间间隔收集到数组中,按时间函数索引:

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

其中 N 是时间(计数)限制,大于 N 的间隔将被丢弃。最初 X 和 Y 用 1 填充。

然后,在我在 X 和 Y 中获得足够数量的它们之后,就该做出决定了。标准是参数C:

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

其中 X 是某些客户端数据,Y 是公共数据,norm() 是校准函数,k 是归一化系数,取决于 norm() 的类型。有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 的校准最适合重复请求,类型 2 最适合以少量间隔重复请求,类型 3 最适合非恒定请求间隔。

你怎么看?如果您能在您的服务上试用此功能,我们将不胜感激。

【问题讨论】:

  • 我只想说:抓取永远存在。在未来,您至少应该考虑一种适合 21 世纪的商业模式。

标签: algorithm security screen-scraping detection


【解决方案1】:

老实说,您的方法完全没有价值,因为它微不足道。攻击者甚至不必编写一行代码即可绕过它。代理服务器是free,您可以在亚马逊 ec2 上以每小时 2 美分的价格启动一台具有新 IP 地址的新机器。

更好的方法是Roboo,它使用 cookie 技术来挫败机器人。绝大多数机器人无法运行 javascript 或 flash,这可以为您带来优势。

然而,所有这些“(in)security though obscurity”,以及它可能起作用的唯一原因是因为您的数据不值得程序员花 5 分钟在上面。 (包括机器人)

【讨论】:

  • 目标是检测抓取,而不是阻止。
  • @aks 如果有人知道,那么绕过它是微不足道的。在这种情况下,他们不会知道。
  • 使用随机间隔似乎会破坏您的方法。
【解决方案2】:

我进行了大量的网络抓取,并且总是在每个请求之间使用多个 IP 地址和随机间隔。

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

【讨论】:

  • 这是最简单的检测方法,其中有cookies检查,实施起来很明显。在这里,我尝试通过用户活动中的异常来猜测抓取。这可能会导致误报,无论如何,用户正在做某事。
  • 这可能不适用于所有情况,因为许多浏览器可以配置为不下载任何依赖项,除非用户点击它们(即广告拦截器、Flash 拦截器等)。文本浏览器也可能不会下载某些依赖项。
【解决方案3】:

如果您专门询问算法的有效性,那还不错,但您似乎将其复杂化了。您应该使用 WAF 已经采用的基本方法来限制连接。一种已经存在的此类算法是漏桶算法 (http://en.wikipedia.org/wiki/Leaky_bucket)。

就停止网络抓取的速率限制而言,尝试限制连接的速率存在两个缺陷。首先是人们使用代理网络或 TOR 来匿名化每个请求的能力。这基本上使您的努力无效。即使像http://www.mozenda.com 这样的现成抓取软件也使用大量IP 并在它们之间轮换来解决这个问题。另一个问题是您可能会阻止使用共享 IP 的人。公司和大学经常使用 NAT,您的算法可能会将它们误认为是一个人。

为了全面披露,我是Distil Networks 的联合创始人,我们经常在 WAF 中挖漏洞,例如速率限制。我们认为需要更全面的解决方案,因此需要我们的服务。

【讨论】:

    【解决方案4】:

    好的,有人可以构建一个机器人,它会进入您的网站,下载 html(而不是 @hoju 的回复中的图像、css 等)并构建要在您的网站上遍历的链接图。

    机器人可以使用随机时间发出每个请求,并使用代理、VPN、Tor 等更改每个请求中的 IP。

    我很想回答您可以尝试通过使用 CSS(在 Internet 上找到的一种常见解决方案)添加隐藏链接来欺骗机器人。但这不是解决方案。当机器人访问禁止链接时,您可以禁止访问该 IP。但是你最终会得到大量被禁止的 IP。此外,如果有人开始欺骗 IP 并向您服务器上的该链接发出请求,您最终可能会与世隔绝。除此之外,有可能实现一个解决方案,让机器人看到隐藏的链接。

    我认为,一种更有效的方法是检查每个传入请求的 IP,使用检测代理、VPN、Tor 等的 API。我在 Google 上搜索了“api detection vpn proxy tor”并找到了一些(付费)服务。也许有免费的。

    如果 API 响应是肯定的,则将请求转发到验证码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      相关资源
      最近更新 更多