如何防止在我的网站上抓取数据?

信息安全 Web应用程序
2021-08-29 02:25:24

如何防止客户端软件从我的网站上抓取数据?

我的 URL 的一些示例是:

运行循环并使用更改的查询字符串请求服务器非常容易。我可以采取哪些安全措施?我网站上的信息每周发布一次(数据输入成本巨大),我不希望有人运行脚本并在几分钟内获得所有信息。

3个回答

如果数据是公开的,你就无法真正阻止它。

但这并不意味着您也必须使抓取数据变得更加容易。

防止枚举

通过公开内部的有序 ID,您可以更轻松地抓取所有产品。

如果您将其更改为产品名称或随机 ID,则攻击者无法通过简单的循环检索所有数据。

限制请求

您可以限制用户可以发出的请求数量。但这并不是那么容易,因为您无法真正通过 IP 地址进行限制(您将限制使用相同 IP 地址的用户,并且攻击者可以更改他们的 IP 地址)。这是一个关于用一些替代想法识别用户的问题。

“蜜罐”

您可以创建从未链接到的假冒产品(或仅在通过 CSS 隐藏的链接中)。

当有人查看此类产品时,禁止他们。

或者,您可以添加相当多的此类产品,而不是禁止抓取工具,而只是让他们保留错误的数据,从而降低他们的数据准确性(这在您的情况下可能有意义,也可能没有意义)。

晦涩的数据

您可以尝试让抓取工具更难使用您的数据。这可能会影响您的用户,并且您可能需要做很多工作(并且与所有方法一样,坚定的攻击者仍然可以获得数据):

  • 将部分数据放入图像中。
  • 经常更改您的 HTML(因此攻击者也必须更改他们的 HTML 解析器)。
  • 屏蔽/加密您的数据并使用 JavaScript 取消屏蔽/解密(不时更改方法,因此攻击者也需要更改他们的方法)。

限制访问

您可以将内容放在登录名后面,并禁止抓取数据的用户(在您的情况下可能不是一个好主意,因为您确实希望没有帐户的用户查看产品)。

法律

每个人都可以自由地抓取您网站上的数据(可能;这可能取决于您的司法管辖区)。但是重新发布很可能违反法律,因此您可以起诉他们。

刮痧艺术家在这里。


无论你是谁,都无法阻止我

没有可靠的方法来做到这一点。你只能让它变得更难。你做得越难,你就越难为合法用户做。我写网络爬虫是为了好玩,不仅绕过了蒂姆的所有上述想法,而且我可以很快做到。

从我的角度来看,任何你介绍来阻止我的东西,如果你的信息足够有价值,我会想办法绕过它我会比你修复它更快地完成所有这些。所以这是在浪费你宝贵的时间。

  • 防止枚举:不会阻止大量页面转储。一旦我得到你的数据,我就可以解析它。
  • 限制请求:禁止环顾四周的合法用户。没关系:我将测试使用 VPN 在特定时间段内允许多少请求。如果你在 4 次尝试后禁止我,我将更新我的爬虫以使用我的分布式代理列表每次尝试获取 4 个项目。这非常简单,因为每个连接都会询问我是否需要代理。简单的例子:

    for (int i = 0; i < numAttemptsRequired; i++)
    {
           using (WebClient wc = new WebClient())
           {
                if (i % 4 == 0)
                {
                     wc.Proxy = proxyList[curProxy];
                     curProxy++;
                }
           }
    }
    

    我还可以添加一个简单的方法来确保每秒发生的次数不会超过几次,速度与普通用户相同。

  • “蜜罐”:禁止四处张望并可能干扰用户体验的合法用户。

  • 晦涩的数据:
    • 将部分数据放入图像中:通过使您的网站无法访问来伤害视障用户。我仍然会下载你的图片,所以这一切都是徒劳的。还有很多程序可以从图像中读取文本。除非你把它弄得非常不清楚和扭曲(这又会影响用户体验),否则我也会从那里获取信息。
    • 经常更改您的 HTML(因此攻击者也必须更改他们的 HTML 解析器):祝您好运。如果您更改名称和内容,您可能会引入一种模式。如果您介绍一种模式,我将使刮板名称与名称无关。这将是一场永无止境的军备竞赛,如果你改变了模式,我只需要几分钟就可以更新它。同时,您已经花费了大量时间来确保一切正常,然后您必须更新您的 CSS,可能还有 javascript。看起来你在这一点上不断地破坏你的网站。
    • 屏蔽/加密您的数据并使用 JavaScript 取消屏蔽/解密(不时更改方法,因此攻击者也需要更改他们的方法):我听过的最糟糕的想法之一。这会给您的网站带来如此多的潜在错误,您将花费大量时间与之抗争。解析这个非常简单,我需要几秒钟来更新刮板。同时,您可能需要 324 小时才能使其正常工作。哦,由于 NoScript,您的一些用户可能没有启用 Javascript。他们会看到垃圾,然后在允许之前离开站点。
  • 限制访问:如果我创建一个帐户,我的爬虫可以登录到您的网站。
  • 法律:该法律仅适用于您所在国家/地区与相关抓取工具共享相同法律的信息。如果您抓取美国网站并重新发布所有内容,中国没有人会关心。大多数国家没有人会关心。

在所有这一切中,我可以通过发送虚假用户代理等来冒充合法用户,基于真实值。


有什么我可以做的吗?

并不真地。就像我说的,你只能让它更难访问。最后,唯一受到伤害的人将是您的合法用户。问问自己,“我会在这个修复上花费多少时间,它将如何影响我的客户?如果有人快速找到解决方法会发生什么?”

如果您试图让您的网站难以访问,您甚至可能最终引入安全漏洞,这将使恶意访问者更容易利用您的网站并转储您的所有信息无需抓取它。更糟糕的是,您的客户可能会受到负面影响。

如果您限制尝试并要求身份验证,这可能会减慢您主网站的聚合速度,我仍然可以在搜索结果/链接页面中找到所有内容。

最后,没关系。我仍然会用我的代理列表来解决这个问题。我仍然会比普通用户更快地获取您的所有数据。


通过更好的用户体验取胜

我相信,如果您向用户提供优质的浏览体验,并且您拥有好的产品,即使其他人也有数据,人们也会来找您。他们知道您的网站可以正常工作,他们不会因错误而感到沮丧,也不会为可用性问题所困扰。

这是一个例子:在 amazon.com 上,我可以通过更改一些数字来非常快速地汇总他们几乎所有的产品。如果我获取这些数据,它会从哪里得到我?即使我有这些产品,人们仍然会访问 Amazon.com,而不是我的仿冒网站。

除了蒂姆的回答中的优点外,还有更多选择

向他们的 ISP 投诉

如果抓取您的网站违反了您的条款和条件,那么如果您向 ISP 投诉您从他们的日志中发现的抓取工具,他们通常会告诉他们停止这样做。

和它一起生活

尝试量化刮擦对您造成的损害。将其与阻止它所需的努力进行比较。真的值得担心,还是只是一个最好忽略的烦恼?