检测“隐身”网络爬虫


107

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

(我知道列表检测技术将使聪明的隐身爬虫程序员能够制造出更好的蜘蛛,但是我认为我们无论如何都不会阻止聪明的隐身爬虫,只有那些会犯错误的人才可以。)

我不是在谈论诸如Googlebot和Yahoo!这样的爬虫。lur 如果它适合我​​,我认为它很不错:

  1. 在用户代理字符串中将自己标识为漫游器
  2. 读取robots.txt(并遵守它)

我说的是糟糕的抓取工具,它们隐藏在常见的用户代理后面,使用我的带宽,从不给我任何回报。

有一些陷阱门可以构造更新列表(感谢Chris,gs)

  1. 添加仅在robots.txt中列出(标记为不允许)的目录,
  2. 添加不可见的链接(可能标记为rel =“ nofollow”?),
    • style =“ display:none;” 在链接或父容器上
    • 放在另一个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之前,将所有URL转换为小写。

然后还有一大堆“不够好”的履带板无法避开各种活板门。

Answers:


15

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

我有6个月左右没有与该客户交谈过,但是最后我听说该系统的运行非常有效。

观点:如果您打算基于命中率限制来构建类似的检测系统,请确保至少使用一分钟(最好至少五分钟)的总计。我看到很多人都在谈论这类计划,他们想阻止每秒点击率达到5-10的任何人,这可能会在图像重磅的页面上产生误报(除非从计数中排除了图像)并且产生错误当像我这样的人找到一个他想阅读所有内容的有趣站点时,这是肯定的,因此当他阅读第一个站点时,他打开了选项卡中的所有链接以在后台加载。


5
我发现由于阻止网络爬虫而导致的误报绝对会杀死网络流量。基本上,您是在惹恼99.8%的用户,这是一种很糟糕的尝试,它阻碍了可以轻松绕过上述简单方法的爬虫。拒绝或阻止用户访问绝对不是一个好主意,因为它破坏了您网站的用户体验。
KJW 2013年

14

请参阅Project Honeypot-他们正在大规模设置漫游器陷阱(并在其IP中使用DNSRBL)。

使用棘手的URL和HTML:

<a href="https://stackoverflow.com//example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;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"> <!-->

9

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

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

当然,您应该期望某些查看源代码的人可以通过该链接来查看链接的方向。但是您可以向这些用户提供验证码...

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


1
除非漫游器检查链接的CSS属性并且不跟随链接,因为该链接对人类用户不可见...
Bob Somers

1
将链接标记为“请勿点击我”会是一个更好的主意。如果某人禁用了CSS(或没有CSS支持),则该链接将可见
。– dbr

好主意。也许将文本更改为“。” 以及CSS样式以匹配背景-使其对大多数用户不可见?或者,运行脚本以在1秒钟后将其隐藏,从而使其仅对无法将javascript hide命令链接到该链接的机器人可见?
颠覆2015年

1
从SEO角度提防黑帽惩罚。
阿尔弗雷德·华莱士

6

您未列出的一件事,通常用于检测不良的爬网程序。

命中速度快,优秀的网络爬虫会破坏命中率,因此他们不会在请求中泛滥成灾。不好的人会做以下三件事之一:

  1. 依次点击顺序链接
  2. 按并列顺序(每次2个或更多)命中顺序链接。
  3. 按固定间隔命中顺序链接

另外,某些脱机浏览程序会占用很多页面,我不确定您要使用哪种阈值来开始按IP地址进行阻止。

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

如果漫游器将时间间隔随机化,则可以检查链接是按顺序还是深度优先遍历,或者可以查看漫游器是否在一个文本中遍历大量文本(如要阅读的文字)时间太短。一些站点还限制每小时的请求数。

实际上,我在某个地方听到过一个主意,我不记得在哪里,如果用户获得太多数据(以千字节为单位),则可以向他们显示验证码,要求他们证明自己不是机器人。我从来没有见过实现。

隐藏链接更新

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

将该想法付诸实施,可能会显示隐藏元素的未调用javascript可能会愚弄javascript解析机器人的子集。并且,要实现它不是很多工作。


16
“忽略JavaScript意味着您是机器人”的主要缺陷:我们中的一些人使用NoScript插件。除非我将网站列入白名单,而且我很确定自己不是机器人,否则任何网站都无法在我身上运行JavaScript。
戴夫·谢罗曼

2
机器人现在可以执行Javascript了……这是出于基督的缘故。因此,整个争论都在进行。谁说网络爬虫按顺序选择访问网站?另一个巨大的假设。
KJW

1
javascript仅用于显示蜜罐链接。这个想法是,机器人解析将使蜜罐链接可见的javascript,从而使他们更有可能跟随该链接。但是,对于实际用户而言,使链接可见的代码将永远不会执行。因此,NoScript用户以及任何不会随机执行功能的用户都可以。就是说,我不确定机器人为何/如何随机执行代码,并且如果它正在进行静态分析以确定某个元素是否可能可见,那将是一个幻想的机器人。
瑞克

4

我听说过的一种简单的机器人检测表单方法是隐藏输入技术。如果您要保护表单安全,请在表单中输入一个ID看起来完全合法的输入。然后在外部文件中使用css将其隐藏。或者,如果您真的很偏执,请设置诸如jquery之类的内容以在页面加载时隐藏输入框。如果您做对了,我想机器人很难弄清楚。您知道这些bot具有填满页面上所有内容的本质,尤其是当您为隐藏的输入提供了id =“ fname”之类的id时。


2
如果漫游器能够像常规浏览器一样等待jQuery完成,则不会。这在00年代初期效果很好
KJW

3

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

我不知道这可以自动化多远,但是至少这是一件与众不同的事情。


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/


1

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

添加不可见的链接(可能标记为rel =“ nofollow”?),

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

我不会那样做。您最终可以被Google列入黑名单SEO的黑名单:)


1
究竟是什么,为什么会使您黑名单?
康特

1

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

根据我的经验,我们的网络爬虫的头号阻止者(当然是使用IE或Firefox UA且不遵守robots.txt。Duh。)是故意托管恶意软件的网站。这是很痛苦的,因为该站点随后退回给必须手动加载站点,对其进行分类并检查其是否为恶意软件的人员。

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

当然,如果它们非常粗鲁并且占用大量带宽,则情况完全不同,因为那您就有了充分的理由。


15
很抱歉,但是如果您运行的爬网程序不遵守robots.txt,则表示您没有遵守规则。通过不遵守规则,您自己就陷入了一个非常糟糕的公司。通过建议强制执行网站所有者(在robots.txt中)设置的规则是不好的做法,您错误地将问题颠倒了。您基本上说您不了解谁是内容的合法所有者。
雅科

11
@Jacco:如果寻找恶意软件的爬虫遵守规则,它将永远找不到。与恶意软件作者交谈。
Zan Lynx 2010年

5
@Jacco:尝试阻止不合规爬网程序的合法站点所占的百分比?低于1%。尝试的恶意软件网站?超过60%。是的,这很可疑。
Zan Lynx 2010年

4
@Jacco实际上不,如果网络上的内容是公开的,则没有所有者。无需手动复制和粘贴而执行此操作的人应被判给奖励而不是惩罚。整个版权概念需要在互联网上废除。只有创造性的创新和信任才能建立价值并值得人们关注,而不是受到不透明法律面纱的威胁。
KJW

所有这些异常值表明,运行站点的人员投入了大量时间和精力进入站点,并且他们具有一定程度的技术技能。因此,当然可以排除大多数钟形曲线。
Parthian Shot

1

人们会继续关注广泛的搜寻器,而不是专门针对您的网站的搜寻器。

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

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

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

另外,也有各种各样的JavaScript挑战可以作为保护(例如Cloudflare的反机器人系统),但是这些挑战很容易解决,您可以编写自定义内容,并且可能具有威慑力,这对于爬虫来说并不值得。

但是,您必须提出一个问题,您是否愿意假冒合法用户并给他们带来不便,以防止漫游器流量。保护公共数据是不可能的悖论。


-1

简短的回答:如果中级程序员知道他在做什么,那么您将无法在不影响实际用户的情况下检测爬虫。公开您的信息后,您将无法针对爬虫进行防御……就像第一修正案的权利一样:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.