如何防止客户端软件从我的网站上抓取数据?
我的 URL 的一些示例是:
运行循环并使用更改的查询字符串请求服务器非常容易。我可以采取哪些安全措施?我网站上的信息每周发布一次(数据输入成本巨大),我不希望有人运行脚本并在几分钟内获得所有信息。
如何防止客户端软件从我的网站上抓取数据?
我的 URL 的一些示例是:
运行循环并使用更改的查询字符串请求服务器非常容易。我可以采取哪些安全措施?我网站上的信息每周发布一次(数据输入成本巨大),我不希望有人运行脚本并在几分钟内获得所有信息。
如果数据是公开的,你就无法真正阻止它。
但这并不意味着您也必须使抓取数据变得更加容易。
防止枚举
通过公开内部的有序 ID,您可以更轻松地抓取所有产品。
如果您将其更改为产品名称或随机 ID,则攻击者无法通过简单的循环检索所有数据。
限制请求
您可以限制用户可以发出的请求数量。但这并不是那么容易,因为您无法真正通过 IP 地址进行限制(您将限制使用相同 IP 地址的用户,并且攻击者可以更改他们的 IP 地址)。这是一个关于用一些替代想法识别用户的问题。
“蜜罐”
您可以创建从未链接到的假冒产品(或仅在通过 CSS 隐藏的链接中)。
当有人查看此类产品时,禁止他们。
或者,您可以添加相当多的此类产品,而不是禁止抓取工具,而只是让他们保留错误的数据,从而降低他们的数据准确性(这在您的情况下可能有意义,也可能没有意义)。
晦涩的数据
您可以尝试让抓取工具更难使用您的数据。这可能会影响您的用户,并且您可能需要做很多工作(并且与所有方法一样,坚定的攻击者仍然可以获得数据):
限制访问
您可以将内容放在登录名后面,并禁止抓取数据的用户(在您的情况下可能不是一个好主意,因为您确实希望没有帐户的用户查看产品)。
法律
每个人都可以自由地抓取您网站上的数据(可能;这可能取决于您的司法管辖区)。但是重新发布很可能违反法律,因此您可以起诉他们。
刮痧艺术家在这里。
没有可靠的方法来做到这一点。你只能让它变得更难。你做得越难,你就越难为合法用户做。我写网络爬虫是为了好玩,不仅绕过了蒂姆的所有上述想法,而且我可以很快做到。
从我的角度来看,任何你介绍来阻止我的东西,如果你的信息足够有价值,我会想办法绕过它。我会比你修复它更快地完成所有这些。所以这是在浪费你宝贵的时间。
限制请求:禁止环顾四周的合法用户。没关系:我将测试使用 VPN 在特定时间段内允许多少请求。如果你在 4 次尝试后禁止我,我将更新我的爬虫以使用我的分布式代理列表每次尝试获取 4 个项目。这非常简单,因为每个连接都会询问我是否需要代理。简单的例子:
for (int i = 0; i < numAttemptsRequired; i++)
{
using (WebClient wc = new WebClient())
{
if (i % 4 == 0)
{
wc.Proxy = proxyList[curProxy];
curProxy++;
}
}
}
我还可以添加一个简单的方法来确保每秒发生的次数不会超过几次,速度与普通用户相同。
“蜜罐”:禁止四处张望并可能干扰用户体验的合法用户。
在所有这一切中,我可以通过发送虚假用户代理等来冒充合法用户,基于真实值。
并不真地。就像我说的,你只能让它更难访问。最后,唯一受到伤害的人将是您的合法用户。问问自己,“我会在这个修复上花费多少时间,它将如何影响我的客户?如果有人快速找到解决方法会发生什么?”
如果您试图让您的网站难以访问,您甚至可能最终引入安全漏洞,这将使恶意访问者更容易利用您的网站并转储您的所有信息而无需抓取它。更糟糕的是,您的客户可能会受到负面影响。
如果您限制尝试并要求身份验证,这可能会减慢您主网站的聚合速度,我仍然可以在搜索结果/链接页面中找到所有内容。
最后,没关系。我仍然会用我的代理列表来解决这个问题。我仍然会比普通用户更快地获取您的所有数据。
我相信,如果您向用户提供优质的浏览体验,并且您拥有好的产品,即使其他人也有数据,人们也会来找您。他们知道您的网站可以正常工作,他们不会因错误而感到沮丧,也不会为可用性问题所困扰。
这是一个例子:在 amazon.com 上,我可以通过更改一些数字来非常快速地汇总他们几乎所有的产品。如果我获取这些数据,它会从哪里得到我?即使我有这些产品,人们仍然会访问 Amazon.com,而不是我的仿冒网站。
除了蒂姆的回答中的优点外,还有更多选择
向他们的 ISP 投诉
如果抓取您的网站违反了您的条款和条件,那么如果您向 ISP 投诉您从他们的日志中发现的抓取工具,他们通常会告诉他们停止这样做。
和它一起生活
尝试量化刮擦对您造成的损害。将其与阻止它所需的努力进行比较。它真的值得担心,还是只是一个最好忽略的烦恼?