【问题标题】:Top techniques to avoid 'data scraping' from a website database避免从网站数据库中“数据抓取”的顶级技术
【发布时间】:2011-01-05 05:21:03
【问题描述】:

我正在使用 PHP 和 MySQL 建立一个站点,该站点本质上只是现有数据库的 Web 前端。可以理解的是,我的客户非常热衷于阻止任何人复制数据库中的数据,但同时希望所有内容都公开可用,甚至希望有一个“查看全部”链接来显示数据库中的每条记录。

虽然我已将一切准备就绪以防止诸如 SQL 注入攻击之类的攻击,但没有什么可以阻止任何人以 html 格式查看所有记录并运行某种脚本将这些数据解析回另一个数据库。即使我要删除“查看全部”链接,理论上仍然有人可以使用自动化流程逐条检查每条记录并将它们编译到一个新的数据库中,实际上是捏造所有信息。

有没有人可以分享任何好的策略来防止甚至阻止这种情况。

【问题讨论】:

  • 您可以从内容中生成图像/pdf

标签: php mysql database


【解决方案1】:

我不知道你为什么要阻止这个。客户提供数据。

大概他们以某种独特的方式创造价值,而这种方式并没有在数据中微不足道地反映出来。

无论如何。

您可以检查浏览器、屏幕分辨率和 IP 地址,看看它是否可能是某种自动抓取工具。

像 cURL 和 wget 这样的大多数东西——除非经过仔细配置——显然不是浏览器。

【讨论】:

    【解决方案2】:

    虽然没有什么可以阻止有决心的人抓取公开内容,但您可以做一些基本的事情来减轻客户的担忧:

    • 用户帐户、IP 地址、用户代理等的速率限制... - 这意味着您限制特定用户组在特定时间段内可以下载的数据量。如果检测到大量数据正在传输,则关闭帐户或 IP 地址。

    • 需要 JavaScript - 确保客户端类似于交互式浏览器,而不是准系统蜘蛛...

    • RIA - 通过富 Internet 应用程序界面使您的数据可用。基于 JavaScript 的网格包括 ExtJs、YUI、Dojo 等。更丰富的环境包括 Flash 和 Silverlight,如 1kevgriff mentions

    • 将数据编码为图像。这对普通用户来说相当麻烦,但您可以将一些数据表或值编码为图像而不是文本,这会击败大多数文本解析器,但当然也不是万无一失的。

    • robots.txt - 拒绝明显的网络蜘蛛,已知的机器人用户代理。

      用户代理:*

      不允许:/

    • 使用机器人元标记。这将停止符合蜘蛛。例如,这将阻止 Google 将您编入索引:

    有不同程度的威慑,第一种选择可能是侵入性最小的。

    【讨论】:

    • 请注意——这个答案可能已经过时了;它在 2010 年有效,但现在几乎所有抓取都能够使用“无头浏览器”(例如 PhantomJS 工具包)能够执行 javascript 并从由丰富的 javascript 界面呈现的页面中获取结果。此外,如果您想进行任何类型的速率限制,您需要找到一种方法来阻止所有 Tor 和公共代理服务,以使任何想要您的数据的人能够在许多唯一 IP 之间传播抓取。
    【解决方案3】:

    如果数据已发布,互联网上的每个人都可以看到和访问它。这包括你想看到的人和你不想看到的人。

    你不能同时拥有它。您可以使数据只能通过帐户可见,并且人们会创建帐户来窃取数据。您可以使数据只能从已批准的 IP 地址中可见,并且人们将通过这些步骤来获得批准,然后再使用它。

    是的,你可以让它变得难以获取,但如果你想让它对普通用户方便,你也需要让它对恶意用户也方便。

    【讨论】:

    • 是的,这也是我的看法。但显然,客户对该网站进行了另一个“专家”观察,现在让我的客户对此感到有些恐慌。在我看来,任何让它变得更困难的尝试要么是微不足道的(例如,需要登录,将数据隐藏在过多或奇怪的 html 标签中),要么会产生严重的可访问性/seo 影响(例如在 php 端混搭数据和用 javascript 再次“解压”它,检查访问者是否使用了“正确”的网络浏览器等)谢谢大家的帮助。
    【解决方案4】:

    你真的无能为力。您可以尝试寻找通过您的网站的自动化流程,但他们最终会获胜。

    经验法则:如果您想对自己保密,请远离互联网。

    【讨论】:

      【解决方案5】:

      我的建议是无论如何这都是非法的,所以如果有人确实抓取了网站,至少你有法律追索权。所以也许最好的办法就是包含一个指向原始网站的链接,让人们刮走。他们刮得越多,您的链接就会出现在互联网上,从而越来越多地建立您的页面排名。

      抓取的人通常不反对包含指向原始站点的链接,因为它与原始作者建立了一种融洽的关系。

      所以我的建议是问问你的老板,这是否真的是网站健康的最佳选择。

      【讨论】:

      • 为什么你认为屏幕抓取是非法的?
      【解决方案6】:

      对此没有简单的解决方案。如果数据是公开可用的,那么它可以被抓取。您唯一能做的就是通过在不影响布局的情况下添加/更改 HTML 使每个条目略微独特,从而使爬虫的生活更加困难。这可能会使某人更难使用正则表达式收集数据,但这仍然不是一个真正的解决方案,我想说任何有足够决心的人都会找到处理它的方法。

      我建议告诉你的客户这是一项无法完成的任务,然后继续你工作的重要部分。

      【讨论】:

        【解决方案7】:

        尝试在您的前端使用 Flash 或 Silverlight。

        虽然如果某人真的下定决心,这并不能阻止他们,但这会更加困难。如果您通过服务加载数据,则始终可以使用安全连接来防止中间人抓取。

        【讨论】:

        • Flash 应用程序比 HTML 网站更容易“抓取”(即拦截和重新解释数据),如果他们将信息作为 AMF 对象发送到页面,那么对于知道如何操作的人来说。
        【解决方案8】:

        有几种方法可以做到这一点,尽管没有一种方法是理想的。

        1. 将数据显示为图像而不是 HTML。这需要在服务器端进行额外处理,但使用 PHP 中的图形库并不难。或者,您可以仅针对超过一定大小(即全部)的请求执行此操作。

        2. 加载页面外壳,然后通过 AJAX 调用检索数据并将其插入 DOM。使用会话设置必须通过 AJAX 调用作为验证传回的哈希。哈希仅在一定时间长度内有效(即 10 秒)。这实际上只是增加了一个额外的步骤,人们必须跳过才能获取数据,但会阻止简单的页面抓取。

        【讨论】:

          【解决方案9】:

          使用 Adob​​e Flex 之类的东西——一个 Flash 应用程序前端——可以解决这个问题。

          除此之外,如果您希望它易于用户访问,则用户可以轻松复制。

          【讨论】:

            【解决方案10】:

            如何创建类似于公告板的巨魔保护的东西...如果检测到抓取(也许每分钟来自一个 IP 的一定数量的访问,或者看起来像站点地图抓取的定向抓取),那么您可以开始呈现垃圾数据,例如更改电话号码的几位数字或在名称字段中添加愚蠢的名称。

            为谷歌 IP 关闭此功能!

            【讨论】:

              【解决方案11】:

              把手从键盘上拿开,问你的客户为什么他希望数据可见但不能被抓取的原因?

              他要求两个不一致的东西,也许就他的推理进行讨论会产生一些结果。

              可能是他真的不希望它公开访问,你需要添加身份验证/授权。或者他可能认为实际开放 API 是有价值的。但在你问之前你不会知道的。

              【讨论】:

                【解决方案12】:

                通常,要进行大量屏幕抓取,必须向您的服务器发出数百、数千(甚至更多)请求。我建议你阅读这个相关的 Stack Overflow 问题:

                How do you stop scripters from slamming your website hundreds of times a second?

                【讨论】:

                  【解决方案13】:

                  为每个唯一 IP 每加载 10 个页面强制执行一次 reCAPTCHA

                  【讨论】:

                    【解决方案14】:

                    利用抓取工具倾向于快速连续加载许多页面的事实来检测抓取行为。在 x 秒内为每 n 个页面加载显示一个验证码,和/或为每个页面加载包含一个呈指数增长的延迟,当每分钟加载数十个页面时,该延迟变得相当长。

                    这样普通用户可能永远看不到您的验证码,但抓取工具会很快达到迫使他们解决验证码的限制。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2014-07-06
                      • 1970-01-01
                      • 2014-09-25
                      • 1970-01-01
                      • 2018-07-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多