我有nginxnetworking服务器。
我有一个丰富的内容网站,我发现一些恶意机器人正试图抓取我的内容。 我阻止任何curl或wget来这样的我的网站
如果($ http_user_agent〜*(curl | wget)){return 301 $ scheme://www.google.com/; }
但我发现我可以访问的内容,如果我改变了下面的curl请求中的用户代理
curl --user-agent“Googlebot / 2.1(+ http://www.google.com/bot.html)”http://example.com/mypage.php 要么 curl --user-agent“whatever”http://example.com/mypage.php
任何想法如何阻止使用Nginx的 curl或wget生成的任何请求,而不pipe已经发送的假的用户代理
用户代理
用户代理总是可以被欺骗。 还有其他的头可以检查,但更聪明的机器人欺骗这些。 如接受,接受语言,连接和其他一些并不总是使用每个对象types
cookies
较小的智能机器人将无法正确接受和发送cookie,因此您可以使用cookie保护一些资源。 这可能有隐私影响,你应该考虑。
使用Javascript
一些机器人无法处理JavaScript。 你可以有一个隐藏的JavaScript“拼图”,这就要求浏览器计算一个简单的随机math问题的答案。 这将打破许多API Restful客户端,除非你find一个聪明的方法来排除它们。
authentication
如果你有资源要远离僵尸networking,那么你将需要通过身份validation来保护这些资源。
活着
如果你确定每个人点击你的网站将支持保持活力; 包括代理,那么你可以阻止不支持它的连接。 有些人会发现这个选项unorthadox。
晦涩的选项,也可能会限制浏览器和/或API客户端
我也发现一些机器人不能处理TLS1.2 + SNI,因为他们经常使用不支持TLS1.2甚至更不常见的SNI的旧库。 这将限制您的用户在您的网站上击中API的能力。
我会留给你们去研究你们如何testing和实施这些事情,哪些事情可能会或可能不合适。 一个尺寸不适合所有。
从StackOverflow窃取,您可以将url放在您的网站中,但无法通过链接进行访问,但是当抓取工具看到时,它会尝试抓取此地址。 这将允许您阻止该抓取工具。
<a style="display:none" href="./dontgohere.php">A</a>
一旦你列出了你的IP,你可以使用ngx_http_access_module来阻塞地址,甚至fail2ban。 有几个不同的解决scheme可以继续前进。
如果你严格禁止用户代理string,那么就不可能像Alexander说的那样。
这是不可能的。 curl和wget可以把任何用户代理,并没有可能知道谁爬您的网站。