检测“隐身”networking爬虫
有哪些选项可以检测不想被检测到的networking爬虫?
(我知道列表检测技术将允许智能隐形爬虫程序员做出更好的蜘蛛,但是我不认为我们将永远能够阻止智能隐形爬虫,只有那些犯错的人。)
我不是在谈论像Googlebot和Yahoo! 啜食。 我认为一个机器人很好,如果它:
- 将自己标识为用户代理string中的一个bot
- 读取robots.txt(并服从它)
我正在谈论的是恶意爬虫,隐藏在普通用户代理之后,使用我的带宽,从来不给我任何回报。
有一些陷阱,可以构build更新列表(感谢克里斯,克) :
- 在robots.txt中仅添加一个目录(标记为禁止)
- 添加不可见的链接(可能标记为rel =“nofollow”?),
- style =“display:none;” 在链接或父容器上
- 放置在具有更高Z指数的另一个元素下方
- 发现谁不懂大写,
- 检测谁试图回复,但总是失败的validation码。
- 检测GET请求到仅POST资源
- 检测请求之间的间隔
- 检测请求的页面的顺序
- 检测谁(一致地)通过http请求https资源
- 检测谁不请求图像文件(这与已知图像能力浏览器的用户代理列表结合起来令人惊讶地很好)
有些陷阱会被“好”和“坏”机器人触发。 你可以把这些与白名单结合起来:
- 它触发了一个陷阱
- 它要求
robots.txt
? - 它不会触发另一个陷阱,因为它遵守
robots.txt
另一个重要的事情是:
请考虑盲人使用屏幕阅读器:给人一种联系方式,或解决(非图像)validation码继续浏览。
有什么方法可以自动检testing图将自己作为普通访客进行掩饰的networking爬虫。
更新
问题不是: 我如何捕捉每个爬虫。 问题是: 如何最大限度地检测爬虫的机会。
一些蜘蛛真的很好,实际上parsing和理解html,xhtml,css javascript,VB脚本等…
我没有幻想,我不能打败他们。
然而,你会惊讶一些爬虫是多么愚蠢。 愚蠢的最好的例子(在我看来)是:在请求之前将所有的URL转换为小写。
然后有一大堆爬虫,只是“不够好”,以避免各种陷门。
见项目蜜jar – 他们正在大规模地build立僵尸networking陷阱(并且有IP地址的DNSRBL)。
使用棘手的url和HTML:
<a href="//example.com/"> = http://example.com/ on http pages. <a href="page&#hash"> = page& + #hash
在HTML中,您可以使用大量的注释,CDATA元素,实体等技巧:
<a href="foo<!--bar-->"> (comment should not be removed) <script>var haha = '<a href="bot">'</script> <script>// <!-- </script> <!--><a href="bot"> <!-->
后来,我和一家小型的托pipe公司合作,帮助他们实施解决scheme。 我开发的系统检查了Web服务器日志中的任何给定IP地址的过度活动,并发布了防火墙规则来阻止违规者。 它包括基于http://www.iplists.com/的IP地址/范围的白名单,然后根据需要通过检查声称的用户代理string自动更新IP地址/范围,并且如果客户声称是合法的蜘蛛而不是白名单,它执行DNS /反向DNS查找以validation源IP地址是否与bot的声明所有者相对应。 作为故障安全,这些操作通过电子邮件向pipe理员报告,如果评估不正确,还会将地址列入黑名单或白名单。
我在六个月左右还没有和那个客户谈过,但是最后我听说,这个系统运行得非常有效。
要点:如果您正在考虑基于命中率限制来执行类似的检测系统,请务必使用至less一分钟(最好至less五分钟)的总计。 我看到很多人在谈论这类计划,他们想要阻止任何人在一秒钟内达到5-10次点击,这可能会在图像繁重的页面上产生误报(除非图像被排除在计数之外),并会产生错误当像我这样的人发现一个有趣的网站,他希望读所有的,所以他打开所有链接在标签中加载在后台,而他读第一个。
一个简单的解决scheme是创build一个链接,使其不可见
<a href="iamabot.script" style="display:none;">Don't click me!</a>
当然,你应该期望看到源代码的一些人跟随这个链接,看看它在哪里。 但是你可以给用户提供一个validation码
当然,有效的爬虫也会跟随链接。 但是你不应该实现一个rel = nofollow,而是寻找一个有效的爬虫的标志。 (如用户代理)
有一件事你没有列出,通常用于检测恶意爬虫。
击中速度,好的networking爬虫将打破他们的命中,所以他们不要洪水网站的要求。 坏的将做三件事之一:
- 连续击中连续的链接
- 按一些并列序列命中顺序链接(每次2个或更多)。
- 以固定的时间间隔按顺序链接
此外,一些离线浏览程序将沾上一些页面,我不知道什么样的门槛,你想使用,开始阻止IP地址。
这个方法也会捕获像fmirror或wget这样的镜像程序。
如果机器人随机化时间间隔,则可以检查链接是以顺序还是以深度优先的方式遍历,或者可以查看机器人是否正在遍历大量文本(如在文字中读取)太短的时间。 一些网站也限制每小时的请求数量。
实际上,我在某个地方听到了一个想法,我不记得在哪里,如果用户获得的数据太多,以千字节为单位,他们可以提供一个validation码,要求他们certificate他们不是一个机器人。 我从来没有见过这个实现。
更新隐藏链接
就隐藏链接而言,你可以把一个div放在另一个下面,用CSS(把它放在第一个绘制顺序),并可能设置z顺序。 一个机器人不能忽略,不parsing所有的JavaScript,看看它是否是一个菜单。 在一定程度上,无形的DIV元素内的链接也不能被忽略,而不需要parsing所有的javascript。
采取这个想法完成,未调用的JavaScript可能会显示隐藏的元素将possilby愚弄的JavaScriptparsing机器人的子集。 而且,实施起来并不是很多。
一个简单的机器人检测方法,我听说的forms是隐藏的input技术。 如果您正在尝试确保表单中的input信息的ID是完全合法的。 然后在外部文件中使用css来隐藏它。 或者,如果你真的偏执狂,设置一些像jquery隐藏页面加载input框。 如果你这样做的话,我想像一个机器人很难弄清楚。 你知道那些机器人有它自然填充页面上的一切,尤其是如果你给你的隐藏的input一个像ID =“FNAME”等ID。
未经testing,但这里是一个很好的用户代理列表,您可以使用正则expression式。 可以让你在那里的大部分方式:
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/
保持良好的用户代理string并不那么容易。 浏览器版本来来去去。 通过不同行为对用户代理string进行统计可以揭示有趣的事情。
我不知道这可以自动化多远,但至less这是一个区别的事情。
您也可以检查推介。 没有转诊可能会提高机器人的嫌疑。 不好的转介意味着它不是浏览器。
添加不可见的链接(可能标记为rel =“nofollow”?),
* style="display: none;" on link or parent container * placed underneath another element with higher z-index
我不会这样做的。 您可以结束由黑帽SEO黑名单:)
我目前为一家扫描网站的公司工作,以对其进行分类。 我们也检查网站的恶意软件。
根据我的经验,我们的networking爬虫(当然使用IE或Firefox UA,不遵守robots.txt。Duh)的头号拦截器是故意托pipe恶意软件的网站。 这是一个痛苦,因为该网站然后回落到一个人必须手动加载网站,分类并检查它的恶意软件。
我只是说, 通过阻止networking爬虫,你把自己放在一个坏的公司。
当然,如果他们是非常粗鲁的,并且吸取了大量的带宽,这是一个不同的故事,因为那么你有一个很好的理由。