Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm web抓取的检测方法_Algorithm_Security_Screen Scraping_Detection - Fatal编程技术网

Algorithm web抓取的检测方法

Algorithm web抓取的检测方法,algorithm,security,screen-scraping,detection,Algorithm,Security,Screen Scraping,Detection,我需要检测我的网站上的信息刮。我尝试了基于行为模式的检测,虽然计算量相对较大,但似乎很有希望 其基础是收集特定客户端的请求时间戳,并将其行为模式与普通模式或预计算模式进行比较 更准确地说,我将请求之间的时间间隔收集到数组中,并按时间函数进行索引: i = (integer) ln(interval + 1) / ln(N + 1) * N + 1 Y[i]++ X[i]++ for current client 如果N是时间(计数)限制,则丢弃大于N的间隔。最初,X和Y用1填充 然后,当我在X

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

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

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

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()的类型。有三种类型:

  • norm(X)=总和(X)/计数(X),k=2
  • norm(X)=sqrt(sum(X[i]^2),k=2
  • norm(X)=max(X[i]),k是非空元素数量X的平方根
  • C在范围(0..1)内,0表示没有行为偏差,1表示最大偏差

    С1类校准最适用于重复请求,2类校准适用于间隔较短的重复请求,3类校准适用于非恒定请求间隔


    你觉得怎么样?如果你能在你的服务上尝试一下,我会很感激的。

    老实说,你的方法完全没有价值,因为它只是一个微不足道的旁路。攻击者甚至不需要编写一行代码来绕过它。代理服务器是,你可以在amazon ec2上以每小时2美分的价格启动一台具有新ip地址的新机器

    一个更好的方法是使用cookie技术来屏蔽机器人。绝大多数机器人不能运行javascript或flash,这对你是有利的


    然而,所有这些都是“(in)”,它可能工作的唯一原因是,你的数据不值得程序员花5分钟在上面。(包括Roboo)

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


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

    如果您专门询问算法的有效性,这并不坏,但似乎过于复杂化了。您应该使用WAF已经采用的基本方法来限制连接的速率。已经存在的此类算法之一是泄漏Bucket算法()

    就阻止网络抓取的速率限制而言,尝试对连接进行速率限制有两个缺陷。第一个缺陷是人们能够使用代理网络或TOR匿名化每个请求。这基本上会使你的努力付诸东流。即使是现成的抓取软件,如使用一大块IP并通过它们轮流解决这个问题。ot她的问题是,你可能会阻止人们使用共享IP。公司和大学经常使用NAT,你的算法可能会把他们误认为一个人


    为了充分披露,我是WAF的共同创办人,我们经常在WAF的限速上戳洞。我们认为需要一个更全面的解决方案,因此需要我们的服务。

    好的,有人可以制作一个机器人,进入你的网站,下载html(而不是像@hoju的回答那样,下载图像、css等)并构建一个要在站点上遍历的链接图

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

    我很想回答,你可以通过使用CSS(互联网上常见的解决方案)添加隐藏链接来欺骗机器人。但这不是一个解决方案。当机器人访问一个被禁止的链接时,你可以禁止访问该IP。但你最终会得到一个庞大的被禁止IP列表。此外,如果有人开始欺骗IP并在你的服务器上请求该链接,你最终可能会与世界隔离。除此之外,解决方案可能会实现了一种允许机器人看到隐藏链接的方法

    我认为,更有效的方法是检查每个传入请求的IP,使用检测代理、vpn、Tor等的API。我在谷歌搜索了“API检测vpn代理Tor”,找到了一些(付费)服务。可能有免费的


    如果API响应是肯定的,将请求转发给CAPTCHA。

    我必须说:刮擦总是存在的。在将来,你应该至少考虑一个适合于二十一世纪的商业模式。目标是检测刮削,而不是阻止。@ AKG如果有人知道,那么它的琐碎要绕过。在这种情况下,它不知道。ndom间隔似乎会挫败您的方法。这是最简单的检测方法,其中包括Cookie检查,而且很容易实现。在这里,我尝试通过用户活动中的异常来猜测刮取。这可能会导致错误警报,无论如何,用户正在做一些开始的事情。这可能不会在所有情况下都起作用,因为许多浏览器都可以配置为o除非用户点击任何依赖项(即广告拦截器、flash拦截器等),否则不得下载它们。文本浏览器也可能不会下载某些依赖项。