代码之家  ›  专栏  ›  技术社区  ›  Stephen M. Redd

防止对网站数据进行爬网和翻录

  •  15
  • Stephen M. Redd  · 技术社区  · 17 年前

    我正在研究建立一个内容站点,其中可能包含数千个不同的条目,可以通过索引和搜索进行访问。

    我能采取什么措施来防止 恶意爬虫 从我的网站上删除所有数据?我不太担心搜索引擎优化,虽然我不想把合法的爬虫都挡在一起。

    例如,我曾考虑随机更改用于显示我的数据的HTML结构的小部分,但我想它不会真正有效。

    12 回复  |  直到 17 年前
        1
  •  14
  •   Unsliced    17 年前

    理论上,任何肉眼可见的网站都有可能被撕开。如果你想试着去接近,那么,根据定义, 必须 事实就是如此(如果你的内容不能被机器读取,那么说浏览器还能如何传递你的内容)。

    你最好的办法是研究你的内容的水印,这样至少如果它被撕破了,你可以指向水印并声明所有权。

        2
  •  10
  •   Oli    17 年前

    在这之间:

    我可以采取什么措施来防止恶意爬虫撕扯

    而这:

    我不想把合法的爬虫都挡在一起。

    你要求很多。事实上,如果你想阻止恶意的爬虫,你最终也会阻止所有“好”的爬虫。

    你必须记住,如果人们想要抓取你的内容,他们将投入比搜索引擎机器人更多的人工努力…所以,把你的重点放在正确的位置上。您有两个选择:

    1. 让互联网上的农民窃取你的内容。注意它(在谷歌搜索一些你更独特的短语),并向互联网服务提供商发送记录请求。除了时间,这个选择对你几乎没有任何影响。
    2. 使用Ajax和滚动加密从服务器请求所有内容。您需要保持方法的更改,甚至是随机的,以便每个页面加载都带有不同的加密方案。但即使如此 如果有人想破解它,就要破解。你也会丢掉搜索引擎的脸,从而影响真实用户的流量。
        3
  •  5
  •   Richard Harrison    17 年前

    事实上,你不能阻止恶意爬虫——你为防止它们而采取的任何措施都可能伤害你的合法用户(除了可能在robots.txt中添加条目以允许检测之外)。

    所以你要做的是计划内容被窃取-它很可能以一种或另一种形式发生-并理解你将如何处理未经授权的复制。

    预防是不可能的,而且会浪费你的时间去尝试做到这一点。

    确保网站上的内容不易被复制的唯一可靠方法是拔掉网线…

    要检测它,请使用 http://www.copyscape.com/ 也许有帮助。

        4
  •  4
  •   Loris    17 年前

    好的爬虫会遵循robots.txt中指定的规则,而恶意爬虫则不会。 你可以为坏机器人设置一个“陷阱”,如下所述: http://www.fleiner.com/bots/ .
    但是,同样,如果你把你的内容放到互联网上,我认为如果你尽可能无痛地找到(事实上,你在这里发布而不是在某个蹩脚的论坛上 专家交流 他们的意见)

        5
  •  4
  •   HS.    17 年前

    不要试图在网络上建立限制!

    其实就这么简单。

    每一个阻止撕裂的潜在措施(除了一个非常严格的robots.txt)都会伤害你的用户。俘获比获得更痛苦。检查用户代理会关闭意外的浏览器。对于“聪明”的javascript技巧也是如此。

    请保持网络开放。如果你不想从你的网站上得到任何东西,那就不要在那里发布。水印可以帮助您声明所有权,但这只在您希望在损害发生后提起诉讼时有帮助。

        6
  •  3
  •   nickf    17 年前

    阻止网站被机器破坏的唯一方法是让用户证明他们是人类。

    你可以让用户执行一个对人来说容易,对机器来说难的任务,例如:验证码。当用户第一次到达您的站点时,提供一个验证码,并且只允许他们在完成后继续。如果用户开始从一页移到另一页太快,请重新验证。

    这不是100%有效,黑客总是试图打破他们。

    或者你可以做出缓慢的反应。你不需要让它们爬行,但要选择一个对人类来说合理的速度(这对于机器来说是非常慢的)。这只会让他们花更长的时间来清理你的网站,但并非不可能。

    好啊。没有主意。

        7
  •  2
  •   paxdiablo    17 年前

    如果你要建立一个公共网站,那是非常困难的。有一些方法涉及到服务器端脚本来生成内容,或者使用非文本(flash等)来最小化翻录的可能性。

    但老实说,如果你认为你的内容是如此的好,只要密码保护它,并从公共领域删除它。

    我的观点是,整个网络的重点是尽可能多地向人们传播有用的内容。

        8
  •  1
  •   jeremy    17 年前

    简而言之:你不能阻止撕裂。恶意机器人通常使用IE用户代理,现在相当智能。如果你想让你的网站访问到最大数量(即屏幕阅读器等),你不能使用javascript或流行的插件(flash),因为它们可以禁止合法用户的访问。

    也许您可以有一个cron作业,它从数据库中随机抽取一个片段,并通过谷歌搜索来检查是否匹配。然后,你可以试着抓住这个有问题的网站,要求他们把内容取下来。

    您还可以监视来自给定IP的请求的数量,并在超过阈值时阻止它,尽管您可能不得不白名单合法的僵尸,对僵尸网络没有任何用处(但如果您是对付僵尸网络的,可能抓取不是您最大的问题)。

        9
  •  1
  •   Seldaek    17 年前

    如果内容是公开的并且是免费可用的,即使有页面视图限制或者其他什么,您也无能为力。如果您需要注册和/或付款来访问数据,您可能会对其进行一些限制,至少您可以看到谁读取了什么,并识别了似乎正在刮取整个数据库的用户。

    然而,我认为你应该面对这样一个事实,即网络是如何工作的,没有很多方法可以阻止机器阅读人类的能力。将所有内容输出为图像当然会让人气馁,但这样的话,网站就无法再访问了,更不用说,即使是非禁用用户也无法复制粘贴任何内容了,这真的很烦人。

    总之,这听起来像是DRM/游戏保护系统——让你的合法用户见鬼去吧,只为了防止一些你根本无法阻止的坏行为。

        10
  •  0
  •   Mote    17 年前

    尽可能使用人工验证器,并尝试使用一些框架(MVC)。站点翻录软件有时无法翻录这种页面。同时检测用户代理,至少可以减少可能的裂土器数量

        11
  •  0
  •   Mark Ingram    17 年前

    您可以尝试使用Flash / Silverlight /Java来显示所有页面内容。这可能会阻止大多数爬虫在它们的轨道上行走。

        12
  •  0
  •   Darren Greaves    17 年前

    我以前有一个基于用户代理头阻塞或允许的系统。 它依赖于爬虫程序设置他们的用户代理,但似乎大多数都是这样。

    当然,如果他们使用假头来模拟流行的浏览器,这是行不通的。