【问题标题】:How to protect/monitor your site from crawling by malicious user如何保护/监控您的网站不被恶意用户抓取
【发布时间】:2008-12-21 22:25:16
【问题描述】:

情况:

  • 内容受用户名/密码保护的网站(并非全部受控,因为他们可以是试用/测试用户)
  • 由于用户名/密码的限制,普通的搜索引擎无法找到它
  • 恶意用户仍然可以登录并将会话 cookie 传递给“wget -r”或其他方式。

问题是监控此类活动并对其做出响应的最佳解决方案是什么(考虑到网站政策是不允许抓取/抓取)

我能想到一些选择:

  1. 设置一些流量监控解决方案来限制给定用户/IP 的请求数。
  2. 与第一点相关:自动屏蔽部分用户代理
  3. (Evil :)) 设置一个隐藏链接,访问该链接时会注销用户并禁用他的帐户。 (可能普通用户不会访问它,因为他不会看到它来点击它,但机器人会抓取所有链接。)

对于第 1 点,您知道已经实施的良好解决方案吗?有什么经验吗?一个问题是,一些误报可能会出现在非常活跃但很人性化的情况下 用户。

对于第 3 点:你认为这真的很邪恶吗?或者您认为它有任何可能的问题吗?

也接受其他建议。

【问题讨论】:

  • 对于需要抓取带有隐藏恶意链接的网站的人来说,请注意:使用可编写脚本的真实网络浏览器,如 Phantom。您的代码可以看到可见的链接,创建虚拟鼠标移动,作品。

标签: web-crawler screen-scraping monitoring


【解决方案1】:

我不会推荐自动锁定,与其说是因为它们一定是邪恶的,不如说是因为它们会立即向恶意用户提供他们触发传感器的反馈,并让他们知道下次不要做同样的事情他们注册的帐户。

而且用户代理屏蔽可能不会很有帮助,因为显然用户代理很容易伪造。

您可能能做的最好的事情就是监控,但如果检测到恶意行为,您仍然需要询问您将要做什么。只要您拥有不受控制的访问权限,您锁定的任何人都可以使用不同的身份再次注册。我不知道您需要什么样的信息才能获得一个帐户,但例如,只需一个姓名和电子邮件地址,对任何人来说都不会成为太大的障碍。

这是典型的 DRM 问题 - 如果任何人都可以看到信息,那么任何人都可以用它做任何他们想做的事情。你可以让它变得困难,但最终如果某人真的下定决心,你就无法阻止他们,而且你可能会干扰合法用户并损害你的业务。

【讨论】:

    【解决方案2】:

    第 1 点有你自己提到的问题。此外,它也无助于网站的较慢爬网,或者如果确实如此,那么对于合法的重度用户来说可能会更糟。

    您可以扭转第 2 点,只允许您信任的用户代理。当然,这对于伪造标准用户代理的工具无济于事。

    第 3 点的变体只是向网站所有者发送通知,然后他们可以决定如何处理该用户。

    与我对第 2 点的变体类似,您可以将其设为更柔和的操作,并通知某人正在使用奇怪的用户代理访问该网站。

    编辑:相关,当我访问我自己的不公开的 URL 时,我曾经遇到过一个奇怪的问题(我只是在登台一个我没有在任何地方宣布或链接的网站)。尽管除了我之外没有人应该知道这个 URL,但突然间我注意到日志中有点击。当我找到它时,我发现它来自某个内容过滤网站。原来我的移动 ISP 使用了第三方来阻止内容,它拦截了我自己的请求——因为它不知道该站点,然后它获取了我试图访问的页面,并且(我假设)做了一些关键字分析为了决定是否阻止。这种事情可能是你需要注意的尾端情况。

    【讨论】:

    • 与编辑相关:我想我可以添加浏览器或代理,并对这个问题进行一些邪恶的预取。
    【解决方案3】:

    取决于我们谈论的是哪种恶意用户。

    如果他们知道如何使用 wget,他们可能每次都可以设置 Tor 并获取新 IP,慢慢复制您拥有的所有内容。我认为您无法在不给您的(付费?)用户带来不便的情况下阻止这种情况。

    它与游戏、音乐、视频上的 DRM 相同。如果最终用户应该看到某些东西,您就无法保护它。

    【讨论】:

      【解决方案4】:

      简短的回答:它不能可靠地完成。

      您可以通过简单地阻止在某个时间范围内导致一定数量的点击的 IP 地址来大有帮助(一些网络服务器开箱即用地支持这一点,其他需要一些模块,或者您可以通过解析您的日志文件和例如使用 iptables),但您需要注意不要阻止主要的搜索引擎爬虫和大型 ISP 的代理。

      【讨论】:

        【解决方案5】:

        选项 3 的问题在于,一旦爬虫弄清楚发生了什么,自动注销将很容易避免。

        【讨论】:

        • 是和不是。您可以使链接动态化。例如,在隐藏链接中生成一个特定于会话的随机字符串(您可以在每个页面点击中生成一个不同的随机字符串),如果您收到该字符串,请注销。但大多数爬虫都在追求特定的东西,而不是遍历每个链接。
        【解决方案6】:

        @frankodwyer:

        • 只有受信任的用户代理不起作用,尤其要考虑被插件或 .net 版本修改的 IE 用户代理字符串。可能性太多,可以伪造。
        • 第 3 点的变化。通知管理员可能会起作用,但如果管理员不经常监控日志,这将意味着不确定的延迟。

        @Greg Hewgill:

        • 自动注销也会禁用用户帐户。至少必须创建一个新帐户,留下更多的痕迹,如电子邮件地址和其他信息。

        为 3. 随机更改 logout/disable-url 会很有趣,但不知道我将如何实现它:)

        【讨论】:

        • 只是一个小小的抱怨,但这应该是一个编辑或评论,而不是一个新的答案。
        【解决方案7】:

        http://recaptcha.net

        每次有人登录或注册时。也许你可以每十次显示一个验证码。

        【讨论】:

        • 不会是一个解决方案,因为这只会控制注册/登录。登录后(作为普通用户/浏览器),您可以将会话 cookie 移动到爬虫进程并继续。
        【解决方案8】:

        添加了 cmets:

        • 我知道您无法完全保护普通用户应该能够看到的内容。我一直在问题的双方:)
        • 从开发人员的角度来看,您认为花费时间与受保护案例的最佳比率是多少?我猜一些简单的用户代理检查会删除一半或更多的潜在爬虫,我知道你可以花几个月的时间来开发以保护最后 1%

        再次,从服务提供商的角度来看,我也很感兴趣一个用户(爬虫)不会为其他用户消耗 cpu/带宽,所以您可以指出任何好的带宽/请求限制器吗?

        回复评论:平台规范:基于在 JBoss AS 上运行的 JBoss Seam 的应用程序。但是前面有一个apache2。 (在linux上运行)

        【讨论】:

        • 你在哪个平台上?操作系统和应用程序框架之类的东西在很大程度上决定了哪些特定选项可用于监控、限制等。
        【解决方案9】:

        Apache 有一些 IP 带宽限制模块 AFAIK,对于我自己的包含大量数字内容的大型 Java/JSP 应用程序,我推出了自己的 servlet 过滤器来做同样的事情(并限制来自一个 IP 块的同时连接,等)。

        我同意上面的 cmets 最好是微妙的,这样恶意用户就无法判断他们是否/何时触发了您的警报,因此他们不知道采取规避行动。在我的情况下,我的服务器似乎变得缓慢、不稳定和不可靠(所以那里没有改变)......

        Rgds

        达蒙

        【讨论】:

          猜你喜欢
          • 2021-05-04
          • 1970-01-01
          • 2022-01-07
          • 1970-01-01
          • 2023-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-14
          相关资源
          最近更新 更多