代码之家  ›  专栏  ›  技术社区  ›  Drew Noakes

如何检测通过Tor匿名发送的入站HTTP请求?

  •  6
  • Drew Noakes  · 技术社区  · 14 年前

    我正在开发一个网站,并且对人们截取我的数据很敏感。我不担心刮去一两页--我更关心的是有人刮去几千页,因为这些数据的总和比一小部分更有价值。

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

    我知道在安装时可以检测到Tor流量 Vidalia 通过Firefox扩展,谷歌网站给了我一个验证码。

    那么,我怎样才能发现这样的请求呢?

    (我的网站在ASP.NETmvc2,但我认为这里使用的任何方法都是独立于语言的)

    6 回复  |  直到 14 年前
        1
  •  13
  •   Aillyn    14 年前

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

    算了吧。如果它在网络上,有人想要它,它将是 不可能的 阻止他们得到它。你设置的限制越多,就越有可能破坏合法用户的用户体验,而合法用户有望成为你的大多数受众。这也使得代码更难维护。

        2
  •  4
  •   rook    14 年前

    你可以对照他们的ip地址列表 Tor Exit Nodes . 我知道事实上,这甚至不会减缓谁是在刮你的网站感兴趣的人。Tor太慢了,大多数刮刀都不会考虑。有数以万计的开放代理服务器,可以很容易地扫描或列表可以购买。代理服务器很好,因为如果你的请求上限被打破,你可以将它们线程化或者轮换。

    让我说清楚: 你不能阻止别人刮你的网站。

        3
  •  2
  •   Kosi2801    14 年前

    通过tor网络组件的设计,接收者不可能发现请求者是原始来源还是仅仅是一个中继请求。

    你在谷歌看到的这种行为可能是由不同的安全措施造成的。Google检测登录用户是否更改了其ip,并提供一个验证码以防有害的拦截,如果经过身份验证的用户确实更改了其ip(通过重新登录到ISP等),Google还允许会话继续。

        4
  •  0
  •   user3292876    10 年前

    我知道这很老了,但我是通过谷歌搜索来的,所以我想我应该找到问题的根源。我开发web应用程序,但我也会滥用和剥削他人。我可能就是你想挡在外面的那个人。

    如果你主要担心的是DDoS效应,不要担心。真正的DDoS攻击要么需要肌肉,要么需要一些对服务器造成压力的漏洞。不管你有什么类型的网站,你都会被蜘蛛和坏人的攻击所淹没。只是生活中的一个事实。事实上,服务器上的这种逻辑几乎永远无法很好地扩展,并且可能是导致您面临真正DDoS攻击的单点故障。

    如果你真的不想任何人抓取你的数据,你可以做一些事情。如果它是一个博客内容或什么的,我一般说要么不担心它或有摘要只有RSS饲料,如果你需要饲料。刮博客内容的危险在于,实际上很容易得到一篇文章的精确副本,垃圾链接,并对其进行排名,同时将原文从搜索结果中剔除。同时,因为人们很容易就不会把精力放在特定的网站上,因为他们可以大量地获取RSS提要。

    如果你的网站更多的是一个动态内容的服务,那就完全是另一回事了。我实际上搜刮了很多这样的网站来“窃取”大量的结构化专有数据,但也有一些方法让它变得更难。您可以限制每个IP的请求,但是使用代理很容易做到这一点。对于一些真正的保护来说,相对简单的模糊处理有很长的路要走。如果你试着去做一些类似谷歌搜索结果或者从YouTube下载视频的事情,你会发现有很多东西需要逆向工程。我做这两个,但99%的人谁尝试失败,因为他们缺乏知识去做。他们可以刮代理绕过IP限制,但他们没有破坏任何加密。

    举个例子,据我所知,Google结果页面附带了一个模糊的脚本,它在页面加载时被注入DOM,然后设置了一些令牌,所以您必须解析它们。然后是一个带有这些标记的ajax请求,该请求返回模糊的JS或JSON,这些JS或JSON被解码以构建结果,依此类推。作为开发人员,这并不难做到,但绝大多数潜在的窃贼无法处理。大多数不能投入努力的人。我这样做是为了包装真正有价值的服务谷歌,但对于大多数其他服务,我只是转移到一些较低挂果在不同的供应商。

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

        5
  •  0
  •   user3354312    10 年前

    我认为,把重点放在如何“不可能”阻止一个有决心和技术头脑的用户刮网站上,意义太大了。@德鲁诺克斯说,该网站包含的信息,当采取在总有一些'价值'。如果一个网站有聚合数据,可以由不受约束的匿名用户轻松访问,那么是的,防止刮取可能是“不可能的”。

    我建议要解决的问题不是如何防止用户删除聚合数据,而是可以使用什么方法将聚合数据从公共访问中删除;从而消除删除者的目标,而不需要做“不可能的”事情,防止删除。

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

    同样,用户请求的数据量大大超过正常值,这有助于确定有可能报废数据的个人;这种方法甚至可以自动化,甚至可以进一步扩展,以便跨多个账户查找表明报废的模式。用户1刮10%,用户2刮下10%,用户3刮下10%,等等。。。像这样的模式(以及其他模式)可以提供一个单独的个人或团体利用多个帐户恶意使用系统的强大指标

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

    将用户帐户并入站点,为用户建立使用基线,识别和限制明显偏离典型使用模式的用户(或其他缓解方法),创建一个用于请求已处理/摘要结果集的接口(与原始聚合数据相比)将为意图窃取您的数据的恶意个人带来极大的复杂性。可能不可能阻止网站数据的废弃,但“不可能”是基于刮刀可以随时访问的聚合数据。你看不见的东西不能刮。因此,除非聚合数据是未经处理的原始文本(例如图书馆的电子书),否则最终用户不应该访问原始聚合数据。即使是在图书馆的电子书示例中,也应该阻止或限制与可接受的使用模式的重大偏差,例如请求大量的整本书。

        6
  •  0
  •   assafmo    6 年前

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

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