110

有哪些选项可以检测不想被检测到的网络爬虫?

(我知道列出检测技术可以让智能隐形爬虫程序员制作出更好的蜘蛛,但我认为无论如何我们都无法阻止智能隐形爬虫,只能阻止那些犯错误的爬虫。)

我不是在谈论像 googlebot 和 Yahoo! 这样的爬虫。啜饮。我认为一个机器人很好,如果它:

  1. 在用户代理字符串中将自己标识为机器人
  2. 读取 robots.txt(并服从它)

我说的是糟糕的爬虫,隐藏在普通用户代理后面,使用我的带宽,从不给我任何回报。

有一些活板门可以构建更新列表(感谢 Chris,gs)

  1. 添加仅在 robots.txt 中列出(标记为不允许)的目录,
  2. 添加隐形链接(可能标记为 rel="nofollow"?),
    • 样式=“显示:无;” 在链接或父容器上
    • 放置在具有更高 z-index 的另一个元素下方
  3. 检测谁不了解 CapiTaLiSaTioN,
  4. 检测谁试图发布回复但始终未能通过验证码。
  5. 检测对仅 POST 资源的 GET 请求
  6. 检测请求之间的间隔
  7. 检测请求页面的顺序
  8. 检测谁(一致地)通过 http 请求 https 资源
  9. 检测谁不请求图像文件(这与已知图像浏览器的用户代理列表相结合,效果非常好)

“好”和“坏”机器人都会触发一些陷阱。您可以将它们与白名单结合起来:

  1. 它触发了一个陷阱
  2. 它要求robots.txt
  3. 它不会触发另一个陷阱,因为它服从了robots.txt

另一件重要的事情是:
请考虑使用屏幕阅读器的盲人:给人们一种联系您的方式,或解决(非图像)验证码以继续浏览。

有什么方法可以自动检测试图将自己伪装成普通人类访问者的网络爬虫。

更新
问题不是:我如何捕获每个爬虫。问题是:如何最大限度地提高检测到爬虫的机会。

有些蜘蛛真的很厉害,实际上可以解析和理解 html、xhtml、css javascript、VB 脚本等......
我没有幻想:我无法击败它们。

但是,您会惊讶于某些爬虫是多么愚蠢。愚蠢的最好例子(在我看来)是:在请求它们之前将所有 URL 转换为小写。

然后有一大堆爬虫“不够好”,无法避开各种活板门。

4

11 回答 11

17

不久前,我与一家小型托管公司合作,帮助他们实施解决方案。我开发的系统检查了来自任何给定 IP 地址的过度活动的 Web 服务器日志,并发布了防火墙规则来阻止违规者。它包括基于http://www.iplists.com/的 IP 地址/范围白名单,然后根据需要通过检查声称的用户代理字符串以及如果客户端声称是合法蜘蛛但不在白名单,它执行 DNS/反向 DNS 查找以验证源 IP 地址是否对应于声称的机器人所有者。作为故障保险,这些操作已通过电子邮件报告给管理员,并附有将地址列入黑/白名单的链接,以防评估不正确。

我已经有 6 个月左右没有与那个客户交谈了,但是,我上次听说,系统运行得非常有效。

旁白:如果您正在考虑使用基于命中率限制的类似检测系统,请务必使用至少一分钟(最好至少五分钟)的总数。我看到很多人在谈论这类计划,他们想要阻止任何在一秒钟内获得超过 5-10 次点击的人,这可能会在图像密集的页面上产生误报(除非图像被排除在统计之外)并且产生错误当像我这样的人找到一个他想阅读所有有趣的网站时,他会打开标签中的所有链接,以便在阅读第一个链接时在后台加载。

于 2008-11-22T18:38:33.993 回答
15

See Project Honeypot - they're setting up bot traps on large scale (and have DNSRBL with their IPs).

Use tricky URLs and HTML:

<a href="//example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;hash"> = page& + #hash

In HTML you can use plenty of tricks with comments, CDATA elements, entities, etc:

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->
于 2008-11-21T21:56:04.563 回答
10

一个简单的解决方案是创建一个链接并使其不可见

<a href="iamabot.script" style="display:none;">Don't click me!</a>

当然,您应该期望某些查看源代码的人会跟随该链接,只是为了了解它的方向。但是您可以向这些用户提供验证码...

当然,有效的爬虫也会跟随链接。但是你不应该实现 rel=nofollow,而是寻找有效爬虫的标志。(如用户代理)

于 2008-10-24T13:32:16.560 回答
7

您没有列出的一件事,通常用于检测不良爬虫。

命中速度,好的网络爬虫会打破他们的命中,所以他们不会用请求淹没一个网站。坏人会做以下三件事之一:

  1. 一个接一个地点击顺序链接
  2. 以一些并行顺序命中顺序链接(一次 2 个或更多。)
  3. 以固定间隔命中顺序链接

此外,一些离线浏览程序会占用大量页面,我不确定您要使用什么样的阈值来开始通过 IP 地址进行阻止。

此方法还将捕获镜像程序,如 fmirror 或 wget。

如果机器人随机化时间间隔,您可以检查链接是否以顺序或深度优先的方式遍历,或者您可以查看机器人是否正在遍历大量文本(如要阅读的单词)时间太短。一些站点也限制每小时的请求数。

实际上,我在某个地方听到了一个想法,我不记得在哪里,如果用户获得了太多的数据,以千字节计,可以向他们提供验证码,要求他们证明他们不是机器人。不过,我从来没有见过这样的实现。

隐藏链接更新

就隐藏链接而言,您可以将一个 div 放在另一个下,使用 CSS(将其放在绘制顺序的首位)并可能设置 z 顺序。机器人无法忽略这一点,而无需解析所有 javascript 以查看它是否是菜单。在某种程度上,如果机器人不解析所有 javascript,也不能忽略不可见 DIV 元素内的链接。

将这个想法完成,可能会显示隐藏元素的未调用 javascript 可能会欺骗 javascript 解析机器人的子集。而且,实施起来也不是很多工作。

于 2008-10-24T13:08:06.440 回答
4

跟上良好的用户代理字符串实际上并不容易。浏览器版本来来去去。通过不同的行为对用户代理字符串进行统计可以揭示有趣的事情。

我不知道这可以自动化到什么程度,但至少这是一件与众不同的事情。

于 2008-10-24T14:58:41.893 回答
4

我听说过的一种简单的表单检测方法是隐藏输入技术。如果您正在尝试保护表单,请在表单中输入一个看起来完全合法的 id。然后在外部文件中使用 css 来隐藏它。或者,如果您真的很偏执,请设置类似 jquery 的东西来隐藏页面加载时的输入框。如果你做对了,我想机器人很难弄清楚。您知道这些机器人天生就可以填写页面上的所有内容,特别是如果您为隐藏的输入提供类似 id="fname" 等的 id。

于 2009-04-07T20:04:24.000 回答
3

未经测试,但这里有一个很好的用户代理列表,您可以从中制作正则表达式。可以让你大部分时间到达那里:

ADSARobot|ah-ha|almaden|aktuelles|Anarchie|amzn_assoc|ASPSeek|ASSORT|ATHENS|Atomz|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|BravoBrian\ SpiderEngine\ MarcoPolo|Bot\ mailto:craftbot@yahoo.com|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIbot|DISCo|DISCo\ Pump|DISCoFinder|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|ecollector|efp@gmx\.net|Email\ Extractor|EirGrabber|email|EmailCollector|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|FavOrg|fastlwspider|Favorites\ Sweeper|Fetch|FEZhead|FileHound|FlashGet\ WebWasher|FlickBot|fluffy|FrontPage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go\!Zilla|Go!Zilla|Go-Ahead-Got-It|GornKer|gotit|Grabber|GrabNet|Grafula|Green\ Research|grub-client|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|http\ generic|HTTrack|httpdown|httrack|ia_archiver|IBM_Planetwide|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy*Library|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkagent|Internet\ Ninja|InternetSeer\.com|Iria|Irvine|JBH*agent|JetCar|JOC|JOC\ Web\ Spider|JustView|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Mag-Net|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MCspider|Memo|Microsoft.URL|MIDown\ tool|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|^Mozilla$|Mozilla.*Indy|Mozilla.*NEWT|Mozilla*MSIECrawler|MS\ FrontPage*|MSFrontPage|MSIECrawler|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NetZip\ Downloader|NetZippy|NEWT|NICErsPRO|Ninja|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OrangeBot|PageGrabber|Papa\ Foto|PackRat|pavuk|pcBrowser|PersonaPilot|Ping|PingALink|Pockey|Proxy|psbot|PSurf|puf|Pump|PushSite|QRVA|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|Scooter|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|Siphon|sitecheck|sitecheck.internetseer.com|SiteSnagger|SlySearch|SmartDownload|snagger|Snake|SpaceBison|Spegla|SpiderBot|sproose|SqWorm|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRobot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagabondo|vayala|visibilitygap|VoidEYE|vspider|Web\ Downloader|w3mir|Web\ Data\ Extractor|Web\ Image\ Collector|Web\ Sucker|Wweb|WebAuto|WebBandit|web\.by\.mail|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEbot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC]

取自: http: //perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/

于 2010-06-25T21:21:12.963 回答
1

您还可以检查推荐。没有推荐可以引起机器人怀疑。糟糕的推荐意味着它肯定不是浏览器。

添加隐形链接(可能标记为 rel="nofollow"?),

* style="display: none;" on link or parent container
* placed underneath another element with higher z-index

我不会那样做的。您最终可能会被谷歌列入黑帽 SEO 的黑名单 :)

于 2011-02-03T13:31:33.433 回答
1

我目前在一家扫描网站以便对其进行分类的公司工作。我们还会检查网站是否存在恶意软件。

根据我的经验,我们的网络爬虫(当然使用 IE 或 Firefox UA 并且不遵守 robots.txt。Duh。)的第一大拦截器是故意托管恶意软件的网站。这很痛苦,因为该站点随后会退回到必须手动加载站点、对其进行分类并检查其是否存在恶意软件的人。

我只是说,通过阻止网络爬虫,您将自己置于一个糟糕的公司中。

当然,如果他们非常粗鲁并且占用了您大量的带宽,那就另当别论了,因为您有充分的理由。

于 2010-06-25T21:52:49.040 回答
1

人们一直在处理广泛的爬虫,而不是专门为您的网站设计的爬虫。

我编写了隐形爬虫,如果它们是单独构建的,那么再多的蜜罐或隐藏链接都不会产生任何影响 - 检测专用爬虫的唯一真正方法是检查连接模式。

使用 AI 的最佳系统(例如 Linkedin)使用 AI 来解决这个问题。
最简单的解决方案是编写日志解析器来分析 IP 连接并将这些 IP 列入黑名单或提供验证码,至少是暂时的。

例如
,如果每 2 秒看到一次 IP X 连接到foo.com/cars/*.html但没有连接到任何其他页面 - 它很可能是机器人或饥饿的高级用户。

或者,有各种 javascript 挑战作为保护(例如 Cloudflare 的反机器人系统),但这些挑战很容易解决,您可以编写一些自定义的东西,这可能足以阻止爬虫的努力。

但是,您必须问一个问题,您是否愿意误报合法用户并为他们带来不便,以防止机器人流量。保护公共数据是一个不可能的悖论。

于 2018-09-14T09:04:52.580 回答
-1

简短的回答:如果一个中级程序员知道他在做什么,你将无法在不影响真实用户的情况下检测到爬虫。公开您的信息,您将无法抵御爬虫……这就像第一修正案一样:)

于 2019-02-27T18:00:52.470 回答