我正在开发一个网站,并且对屏幕抓取我的数据敏感。我并不担心刮掉一两页 - 我更关心的是有人抓了数千页,因为这些数据的总和比一小部分的数据更有价值。
我可以想象基于来自单个IP地址的大量流量来阻止用户的策略,但是Tor network设置了许多电路,这些电路基本上意味着单个用户的流量似乎来自不同的IP地址。
我知道可以检测Tor流量,就像我安装了Vidalia的Firefox扩展程序一样,google.com向我提供了验证码。
那么,我该如何检测这些请求呢?
(我的网站是在ASP.NET MVC 2中,但我认为这里使用的任何方法都是语言无关的)
答案 0 :(得分:13)
我正在开发一个网站 敏感的人屏幕刮我的 数据
忘了它。如果它在网络上并且有人想要它,则不可能阻止它们获取它。您实施的限制越多,您就越有可能破坏合法用户的用户体验,合法用户有望成为您的大多数受众。它还使代码难以维护。
我将针对未来答案提出的任何想法发布对策。
答案 1 :(得分:4)
您可以根据Tor Exit Nodes列表查看其IP地址。我知道一个事实,这甚至不会减慢那些有兴趣刮取你的网站的人。 Tor太慢了,大多数刮刀都不会考虑它。有数以万计的开放代理服务器可以轻松扫描或者可以购买列表。代理服务器很不错,因为如果您的请求上限被命中,您可以对它们进行处理或轮换
谷歌被用户滥用,大多数退出节点都在谷歌黑名单上,这就是为什么你要获得验证码。
让我非常清楚:您无法阻止某人清理您的网站。
答案 2 :(得分:2)
通过设计tor网络组件,接收方无法确定请求者是否是原始来源,或者它是否只是一个中继请求。
您在Google上看到的行为可能是由不同的安全措施引起的。 Google会检测登录用户是否更改了它的IP并提供验证码以防止有害拦截,并且如果经过身份验证的用户确实更改了其IP(通过重新登录到ISP等),则还允许继续会话。
答案 3 :(得分:0)
我知道这已经过时了,但是我从Google搜索到了这里,所以我想我会在这里找到问题的根本问题。我开发Web应用程序,但我也做了很多滥用和利用其他人。我可能是你想要阻止的人。
检测交通流量真的不是你想去的路线。您可以通过解析请求标头来检测大量的开放代理服务器,但您可以获得tor,高匿名代理,袜子代理,直接向垃圾邮件发送者销售的廉价VPN,僵尸网络以及无数其他方式来打破速率限制。你也
如果您的主要问题是DDoS效果,请不要担心。真正的DDoS攻击会带来任何肌肉或某些漏洞,从而给您的服务器带来压力。无论你拥有什么类型的网站,你都会被蜘蛛的点击以及搜索漏洞的坏人所淹没。只是生活中的一个事实。实际上,服务器上的这种逻辑几乎从不能很好地扩展,并且可能是单点故障,让您对真正的DDoS攻击持开放态度。
这也可能是最终用户(包括友方机器人)的单点故障。如果合法用户或客户被阻止,您就会遇到客户服务噩梦,如果错误的抓取工具被阻止,您就会对搜索流量说再见。
如果你真的不希望任何人抓住你的数据,你可以做一些事情。如果它是博客内容或其他内容,我通常会说,如果您需要提要,请不要担心它或只有摘要RSS提要。刮掉博客内容的危险在于,实际上很容易获取文章的精确副本,垃圾邮件链接并对其进行排名,同时将原始文件从搜索结果中删除。同时,因为它很容易,当他们可以批量搜索RSS源时,人们不会努力针对特定网站。
如果您的网站更像是一个包含动态内容的服务,那就是另一个故事。我实际上刮掉了很多这样的网站来“窃取”大量的结构化专有数据,但是有一些选项可以让它变得更难。您可以限制每个IP的请求,但这很容易使用代理。对于一些真正的保护,相对简单的混淆会有很长的路要走。如果您尝试执行类似Google搜索结果或从YouTube下载视频的操作,您会发现逆向工程有很多功能。我做这两件事,但99%的人尝试失败,因为他们缺乏这方面的知识。他们可以抓取代理来绕过IP限制,但他们不会破坏任何加密。
例如,据我所知,Google结果页面附带了混淆的javscript,它会在页面加载时注入DOM,然后设置某种标记,因此您必须解析它们。然后有一个带有那些令牌的ajax请求,这些令牌返回被解码以构建结果的混淆的JS或JSON,依此类推。作为开发人员,这并不难做到,但是绝大多数潜在的盗贼无法处理它。大多数不能付出努力的人。我这样做是为了包装真正有价值的服务谷歌,但对于大多数其他服务,我只是转向不同供应商的一些较低的水果。
希望这对遇到它的人有用。
答案 4 :(得分:0)
我认为关注它是如何不可能的'为了防止一个坚定的,技术精湛的用户刮网站给了太多的意义。 @Drew Noakes表示,该网站包含的信息在汇总时具有一定的价值'。如果一个网站有无限制匿名用户可以轻易访问的汇总数据,那么是的,防止抓取可能几乎是不可能的。
我建议要解决的问题不是如何防止用户抓取聚合数据,而是可以使用哪些方法从公共访问中删除聚合数据;从而消除刮刀的目标,而不需要做“不可能”,防止报废。
汇总数据应该像专有公司信息一样对待。一般而言,专有公司信息不会以汇总或原始形式公开提供给匿名用户。我认为,防止获取有价值数据的解决方案是限制和约束对数据的访问,而不是防止在将数据呈现给用户时将其废弃。
1]用户帐户/访问权限 - 任何人都无法访问给定时间段内的所有数据(特定于数据/域)。用户应该能够访问与他们相关的数据,但从问题中可以清楚地看出,任何用户都没有合法的目的来查询所有聚合数据。在不知道网站细节的情况下,我怀疑合法用户在一段时间内可能只需要一小部分数据。应该阻止或者限制显着超过典型用户需求的请求,以使得刮擦过度耗费并且报废的数据可能过时。
2]运营团队经常监控指标,以确保大型分布式和复杂系统健康。不幸的是,确定零星和间歇性问题的原因变得非常困难,并且通常甚至很难确定存在问题而不是正常的操作波动。运营团队经常处理从许多指标中获取的统计分析历史数据,并将它们与当前值进行比较,以帮助识别系统运行状况中的重大偏差,无论是系统运行时间,负载,CPU利用率等等。
同样,用户对数据量大大超过标准的请求可以帮助识别可能正在废弃数据的个人;这种方法甚至可以自动化,甚至可以进一步扩展,以查看多个帐户中指示报废的模式。用户1刮掉10%,用户2刮掉接下来的10%,用户3刮掉接下来的10%等等......这样的模式(以及其他模式)可以提供单个个人或团体利用系统恶意使用的强大指标多个帐户
3]不要让最终用户直接访问原始聚合数据。具体细节在这里很重要,但简单地说,数据应驻留在后端服务器上,并使用某些特定于域的API进行检索。同样,我假设您不仅仅是提供原始数据,而是响应用户对某些数据子集的请求。例如,如果您拥有的数据是特定区域的详细人口统计数据,那么合法的最终用户将只对该数据的一部分感兴趣。例如,最终用户可能想知道在多单元住房中与父母同住的青少年的家庭地址或特定城市或县的数据。这样的请求将需要处理聚合数据以产生最终用户感兴趣的结果数据集。从输入查询的众多潜在排列中检索每个结果数据集并且完整地重建聚合数据将是非常困难的。考虑到请求/时间的数量,结果数据集的总数据大小以及其他潜在标记,刮板也将受到网站安全性的约束。一个包含领域特定知识的完善的API对于确保API足够全面以满足其目的而非过于笼统以便返回大型原始数据转储至关重要。
将用户帐户纳入站点,为用户建立使用基准,识别和限制与典型使用模式明显不同的用户(或其他缓解方法),以及创建用于请求处理的接口/消化结果集(与原始聚合数据相比)会为意图窃取数据的恶意个人带来显着的复杂性。可能无法阻止网站数据的废弃,但“不可能性”是不可能的。基于刮刀易于访问的聚合数据。你无法抓住你无法看到的东西。因此,除非您的聚合数据是原始未处理文本(例如库电子书),否则最终用户不应该有权访问原始聚合数据。即使在图书馆的电子书示例中,也应该阻止或限制与可接受的使用模式的显着偏差,例如完整地请求大量书籍。
答案 5 :(得分:0)
您可以使用TorDNSEL检测Tor用户 - https://www.torproject.org/projects/tordnsel.html.en。
您可以使用此命令行/库 - https://github.com/assafmo/IsTorExit。