6

我正在开发一个网站,并且对人们屏幕抓取我的数据很敏感。我不担心抓取一两页——我更担心有人抓取数千页,因为这些数据的汇总比一小部分更有价值。

我可以想象基于来自单个 IP 地址的大量流量来阻止用户的策略,但是Tor 网络设置了许多电路,这基本上意味着单个用户的流量随着时间的推移似乎来自不同的 IP 地址。

我知道可以检测 Tor 流量,因为当我安装Vidalia及其 Firefox 扩展程序时,google.com 向我提供了验证码。

那么,我怎样才能检测到这样的请求呢?

(我的网站在 ASP.NET MVC 2 中,但我认为这里使用的任何方法都与语言无关)

4

6 回答 6

14

我正在开发一个网站,并且对人们在屏幕上抓取我的数据很敏感

忘掉它。如果它在网络上并且有人想要它,就不可能阻止他们获取它。您设置的限制越多,您就越有可能破坏合法用户的用户体验,这些合法用户有望成为您的大多数受众。它也使代码更难维护。

我将针对未来答案提出的任何想法发布对策。

于 2010-09-10T19:46:07.020 回答
4

您可以对照Tor Exit Nodes列表检查他们的 IP 地址。我知道这甚至不会减慢对抓取您的网站感兴趣的人的速度。Tor 太慢了,大多数爬虫都不会考虑。有数以万计的开放代理服务器可以轻松扫描或购买列表。代理服务器很好,因为如果您的请求上限被击中,您可以将它们穿线或旋转。

Google 已被 Tor 用户滥用,并且大多数退出节点都在 Google 黑名单上,这就是您获得验证码的原因。

让我非常清楚: 您无法阻止某人抓取您的网站。

于 2010-09-11T00:39:47.073 回答
2

根据 tor 网络组件的设计,接收者无法确定请求者是原始源还是只是中继请求。

您在 Google 中看到的行为可能是由不同的安全措施引起的。Google 会检测登录用户是否更改其 IP 并提供验证码以防万一,以防止有害拦截,并且如果经过身份验证的用户确实更改了其 IP(通过重新登录到 ISP 等),还允许会话继续。

于 2010-09-10T19:46:48.827 回答
0

我知道这是旧的,但我是从谷歌搜索到这里的,所以我想我会在这里找到问题的根本问题。我开发 Web 应用程序,但我也经常滥用和剥削他人。我可能是你想阻止的那个人。

检测 tor 流量真的不是你想去的路线。您可以通过解析请求标头来检测大量开放的代理服务器,但您有 tor、高匿名代理、sock 代理、直接向垃圾邮件发送者、僵尸网络销售的廉价 VPN 以及无数其他打破速率限制的方法。你也

如果您主要关心的是 DDoS 影响,请不要担心。真正的 DDoS 攻击需要强大的力量或一些会给您的服务器带来压力的漏洞。无论您拥有哪种类型的网站,您都会被蜘蛛的点击以及扫描漏洞的坏人淹没。只是生活中的事实。事实上,服务器上的这种逻辑几乎无法很好地扩展,并且可能是单点故障,使您面临真正的 DDoS 攻击。

对于您的最终用户(包括友好的机器人),这也可能是单点故障。如果合法用户或客户被阻止,您将面临客户服务的噩梦,如果错误的爬虫被阻止,您将与搜索流量说再见。

如果您真的不希望任何人获取您的数据,您可以做一些事情。如果是博客内容或其他内容,我通常会说,如果您需要提要,请不要担心,或者只提供摘要 RSS 提要。抓取博客内容的危险在于,实际上很容易获取一篇文章的精确副本、指向它的垃圾邮件链接并对其进行排名,同时将原始内容从搜索结果中剔除。同时,因为它非常容易,当人们可以批量抓取 RSS 提要时,他们不会努力定位特定站点。

如果您的网站更像是具有动态内容的服务,那就完全是另一回事了。实际上,我抓取了很多这样的网站来“窃取”大量结构化的专有数据,但是有一些选项可以让它变得更难。您可以限制每个 IP 的请求,但这很容易通过代理解决。对于一些真正的保护,相对简单的混淆有很长的路要走。如果您尝试执行诸如抓取 Google 结果或从 YouTube 下载视频之类的操作,您会发现需要进行大量逆向工程。这两个我都做,但是 99% 的尝试失败的人是因为他们缺乏做这件事的知识。他们可以抓取代理以绕过 IP 限制,但不会破坏任何加密。

例如,据我所知,Google 结果页面带有混淆的 javscript,它会在页面加载时注入 DOM,然后设置某种令牌,因此您必须将它们解析出来。然后有一个 ajax 请求,其中包含返回混淆的 JS 或 JSON 的标记,这些标记被解码以构建结果等等。作为开发人员,这并不难做到,但绝大多数潜在的窃贼都无法处理。大多数不能付出努力的人。我这样做是为了包装真正有价值的谷歌服务,但对于大多数其他服务,我只是转向不同提供商的一些较低的成果。

希望这对遇到它的人有用。

于 2014-02-10T13:33:39.130 回答
0

我认为关注如何“不可能”阻止坚定且精通技术的用户抓取网站被赋予了太多的意义。@Drew Noakes 指出,该网站包含的信息在汇总时具有一定的“价值”。如果一个网站具有不受约束的匿名用户可以轻松访问的聚合数据,那么是的,防止抓取可能几乎是“不可能的”。

我建议要解决的问题不是如何防止用户抓取聚合数据,而是可以使用哪些方法将聚合数据从公共访问中删除;从而消除了刮板的目标而不需要做'不可能',防止报废。

汇总数据应视为专有公司信息。一般而言,专有公司信息不会以汇总或原始形式向匿名用户公开。我认为防止获取有价值数据的解决方案是限制和约束对数据的访问,而不是防止在将数据呈现给用户时将其废弃。

1] 用户帐户/访问权限——任何人都不应该在给定时间段内访问所有数据(特定于数据/域)。用户应该能够访问与他们相关的数据,但显然从问题来看,没有用户有合法目的来查询所有聚合数据。在不了解该站点的具体情况的情况下,我怀疑合法用户在某个时间段内可能只需要一小部分数据。明显超过典型用户需求的请求应该被阻止或限制,以使抓取非常耗时并且被抓取的数据可能过时。

2] 运营团队经常监控指标以确保大型分布式和复杂系统是健康的。不幸的是,要确定偶发性和间歇性问题的原因变得非常困难,而且通常甚至难以确定存在与正常操作波动相反的问题。运营团队经常处理从许多指标中获取的统计分析历史数据,并将它们与当前值进行比较,以帮助识别系统运行状况的重大偏差,例如系统运行时间、负载、CPU 利用率等。

同样,用户对数据量远远大于标准的请求可以帮助识别可能正在废弃数据的个人;这种方法甚至可以自动化,甚至可以进一步扩展,以跨多个账户查看表明报废的模式。用户 1 抓取 10%,用户 2 抓取接下来的 10%,用户 3 抓取接下来的 10%,等等......这样的模式(和其他模式)可以提供强有力的指示,表明单个个人或团体利用多个帐户

3] 不要让最终用户直接访问原始聚合数据。细节在这里很重要,但简单地说,数据应该驻留在后端服务器上,并使用一些特定于域的 API 进行检索。同样,我假设您不仅提供原始数据,而且还响应用户对某些数据子集的请求。例如,如果您拥有的数据是特定地区的详细人口统计数据,那么合法的最终用户只会对该数据的一部分感兴趣。例如,最终用户可能想知道与父母双方居住在多单元住房中的有青少年的家庭的地址或特定城市或县的数据。这样的请求将需要处理聚合数据以生成最终用户感兴趣的结果数据集。从输入查询的众多潜在排列中提取每个结果数据集并重建其整体的聚合数据将非常困难。考虑到请求/时间的数量、结果数据集的总数据大小和其他潜在标记,抓取工具也会受到网站安全性的限制。一个结合了特定领域知识的开发良好的 API 对于确保 API 足够全面以服务于其目的但又不会过于笼统以致返回大量原始数据转储至关重要。结果数据集的总数据大小和其他潜在标记。一个结合了特定领域知识的开发良好的 API 对于确保 API 足够全面以服务于其目的但又不会过于笼统以致返回大量原始数据转储至关重要。结果数据集的总数据大小和其他潜在标记。一个结合了特定领域知识的开发良好的 API 对于确保 API 足够全面以服务于其目的但又不会过于笼统以致返回大量原始数据转储至关重要。

将用户帐户并入站点,为用户建立使用基线,识别和限制显着偏离典型使用模式的用户(或其他缓解方法),以及创建用于请求处理/消化结果的界面集合(与原始聚合数据相比)会给意图窃取您数据的恶意个人带来极大的复杂性。阻止网站数据的报废可能是不可能的,但“不可能”的前提是汇总数据易于被爬虫访问。你不能刮掉你看不到的东西。因此,除非您的聚合数据是未经处理的原始文本(例如图书馆电子书),否则最终用户不应访问原始聚合数据。即使在图书馆电子书的例子中,

于 2014-02-26T07:38:13.930 回答
0

您可以使用 TorDNSEL - https://www.torproject.org/projects/tordnsel.html.en检测 Tor 用户。

你可以使用这个命令行/库 - https://github.com/assafmo/IsTorExit

于 2018-04-02T08:29:35.530 回答