【问题标题】:How to detect inbound HTTP requests sent anonymously via Tor?如何检测通过 Tor 匿名发送的入站 HTTP 请求?
【发布时间】:2011-04-10 21:45:58
【问题描述】:

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

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

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

那么,我怎样才能检测到此类请求?

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

【问题讨论】:

    标签: security tor denial-of-service network-security


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

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

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

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

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          让我非常清楚:没有什么可以阻止某人抓取您的网站。

          【讨论】:

          • Tor 在延迟方面很慢,但您可以轻松地将负载分散到并发请求中以获得相同的净吞吐量。
          • @Drew Noakes 我不同意代理服务器绝对是要走的路,更快,更多地控制你的 IP 地址。顺便说一句,IP 地址很便宜,就像一分钱一样,你可以买一个大块然后拆掉一些网站。你需要想出一个适用于互联网的商业模式。当人们试图在信息时代限制访问时,这让我大吃一惊。我感觉您的下一个 SO 问题是如何实现有效的 DRM。
          • 我理解你的观点并且倾向于同意。我不是在谈论试图阻止所有人,只是那些没有积极性或能力的人。例如,就像现代 DRM 阻止大多数人学习如何从他们购买的音乐中剥离它一样。
          • @Drew Noakes 我想你没抓住我的意思。 DRM 根本不做任何事情,就像这个伪造的安全系统一样。它不能阻止任何事情(thepiratebay.com),试图停止报废的想法和 DRM 的想法都是由不懂的人构思的。
          • 为此,您可以使用Ipregistry之类的服务(免责声明:我运行该服务)来检测IP地址是否是Tor出口节点,使用代理等。但是,正如许多人之前所说,没有什么可以阻止公共页面被抓取。
          【解决方案5】:

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

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

          【讨论】:

          • 这很有趣,但我不经常使用 Firefox,所以我拥有的任何 cookie 都会有几周的历史。此外,通过 DHCP 更改人们 IP 地址的 ISP 又如何呢?我不是说你错了,我只是想知道他们是否跟踪了 Tor 节点 IP 地址。 Vidalia 在 UI 中显示所有继电器及其 IP 地址的列表。也许 Google 会监控该列表...
          • Google 放置 cookie 的有效期为 2 年 (googleblog.blogspot.com/2007/07/…),因此几周前的 cookie 不是问题。我不知道 Google 使用了多少种不同的机制来识别会话,但其中有很多。顺便说一句,我经常使用谷歌服务(每周一到两次)来继续我的会话,并且我没有使用任何匿名技术。不过这些越来越少了,我猜 Google 会学习我正在使用的 IP 范围(可能类似于 Latitude 位置学习)。
          【解决方案6】:

          我正在开发一个网站 敏感的人屏幕刮我 数据

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

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

          【讨论】:

          • 我同意艾琳的观点;阻止某人对您的网站进行屏幕抓取几乎是不可能的。寻求防止它的选项只会消耗更好的时间来改进您网站的其他方面。专注于使您的网站与众不同且比屏幕刮板更好的事情。以 Stack Overflow 为例:它被大量的底部进纸器刮掉了,但这并不妨碍它变得有用或令人敬畏。
          • @Cal 他们甚至不必抓取它,内容可通过data dumps 获得。
          • @Cal,SO 数据可在 Creative Commons blog.stackoverflow.com/2009/06/…下下载
          • @Aillyn,我支持你,不可能阻止人们获取数据。大多数情况下,我只是对让人们很难做到这一点感兴趣。我可以设想非常简单的阻止行为,它不会阻碍任何人类访问者,但如果有人使用 Tor 网络或其他分布式代理,这种行为就会崩溃。感谢您的回答,如果不是您的鼓励:)
          • @Drew 我使用了这项不允许人们复制其内容的服务。除了大量合法的胡言乱语(即:如果您复制我们的内容,您将在法律的最大范围内受到迫害),该程序在 Java 中运行并清除剪贴板,并检查正在运行的图像捕获进程程式。确实很烦人。我刚刚安装了一个数据包嗅探器并保存了 all 他们的 SOAP 响应。我不仅拥有数据,而且还拥有非常实用、编程友好的格式。然后我匿名发布了内容。所以,是的,不要这样做。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-13
          • 1970-01-01
          相关资源
          最近更新 更多