2013-11-14 61 views
2

的我们有一个小问题与IIS 8UDF检测机器人

我们一直在试图与一个503错误cfheader标签的工作,但每次似乎产生所产生简单的纯文本页面IIS。

我们已经放弃了试图使它好看,并提出了一个漂亮的解决方案。无论如何,这是它的一部分。

我们的想法是在浏览时为机器人和人类生成一个简单的503页面。

以下是代码。

<cfif findNoCase("googlebot", cgi.HTTP_USER_AGENT)> 
    <cfset today = dateFormat(now(), 'dd/mm/yy')&timeFormat(now(), 'HH:mm:ss')> 
    <cfset urlString = "http://"&cgi.SERVER_NAME> 
    <cfif len(trim(cgi.QUERY_STRING))> 
     <cfset urlString = urlString&"?"&cgi.QUERY_STRING> 
    </cfif> 
    <cfmail to="[email protected]" from="[email protected]" subject="Google Has Indexed the website #cgi.SERVER_NAME#"> 
     Google Detected @ #urlString# 
    </cfmail> 
    <!--- eventually alert the search engine ---> 
    <cfheader statuscode="503" statustext="Service Temporarily Unavailable"/> 
    <cfheader name="retry-after" value="3600" /> 
<cfelse> 

Beautiful page content here 

</cfif> 

事情即时知道的......没有人知道一个UDF,将检测为更广泛的搜索引擎吗?正如我希望有一个搜索引擎正在浏览该网站时,该网站通知我。

感谢

+0

WebTrends的,网络分析软件,拥有目前592的 “搜索引擎”,在keyword.ini文件。也许http://stackoverflow.com/questions/677419/how-to-detect-search-engine-bots-with-php可以帮助你,即使它不是cfml –

+6

_“正如我想通过网站通知我曾经有一个搜索引擎正在浏览这个网站。“ - 那么你很快就会收到许多电子邮件。使用Webtrends/[Awstats](http://www.awstats.org/)/ [Piwik](http://piwik.org/)/ etc等现有软件可以更好地查看日志和聚合数据。 –

+4

为什么当机器人尝试为您的网站编制索引时,您会返回503错误?你不想让搜索引擎索引你的网站吗?还有其他的事情可以做,以防止这种情况。 –

回答

0

这里有几件事情:

  1. 我不知道你为什么会想返回503错误。机器人仍然占用一些相同的服务器资源。

  2. 您应该考虑禁用僵尸程序的会话管理(或至少最小化会话超时)。

  3. 如果你正在试图阻止僵尸,你也应该使用robots.txt(见http://www.robotstxt.org/有关良好的信息)。

    很可能您已经在使用robots.txt,但是对于稍后访问此页面的任何人都应该注意。

以下UDF基于Ben Nadel's work。不过,它中的数据应该保持更新。

我可能最终会按照我在我自己的SpamFilter.cfc中使用的模式来做到这一点。但现在,下面的一对UDF应该让你开始。

请注意,我的UDF将CFSCHEDULE视为bot,因为我不想为它使用会话。如果你想阻止所有的机器人,那么你应该从列表中删除它。

<cffunction name="hasCFCookies" access="public" returntype="boolean"> 
    <cfreturn (StructKeyExists(Cookie,"CFID") AND StructKeyExists(Cookie,"CFTOKEN"))> 
</cffunction> 
<cfset request.hasCFCookies = hasCFCookies> 

<cffunction name="isBot" access="public" returntype="boolean"> 
    <!--- 

    Based on code by Ben Nadel: 
    http://www.bennadel.com/blog/154-ColdFusion-Session-Management-Revisited-User-vs-Spider-III.htm 
    ---> 

    <cfset var UserAgent = ""> 

    <!--- If the user has cookies, this is at least a second request from a real user ---> 
    <cfif hasCFCookies()> 
     <cfreturn false> 
    </cfif> 

    <!--- Real users have user-agent strings ---> 
    <cfset UserAgent = LCase(CGI.http_user_agent)> 
    <cfif NOT Len(UserAgent)> 
     <cfreturn true> 
    </cfif> 


    <!--- 
    High-probability checks 
    If the user agent has bot or spider in it, it is a bot 
    Some specific high-volume spiders listed individually 
    ---> 
    <cfif 
      REFind("bot\b", UserAgent) 
     OR Find("spider", UserAgent) 
     OR REFind("search\b", UserAgent) 
     OR UserAgent EQ "CFSCHEDULE" 
    > 
     <cfreturn true> 
    </cfif> 

    <!--- 
    If we haven't yet tagged it as a bot and it is on Windows or Mac (including iOs devices), call it a real user. 
    If this results in a few spiders showing as real users that is OK 
    ---> 
    <cfif REFind("\windows\b", UserAgent) OR REFind("\bmac", UserAgent)> 
     <cfreturn false> 
    </cfif> 

    <!--- If we don't know yet, only figure spiders from a known list of a few ---> 
    <cfif 
      REFind("\brss", UserAgent) 
     OR Find("slurp", UserAgent) 
     OR Find("xenu", UserAgent) 
     OR Find("mediapartners-google", UserAgent) 
     OR Find("zyborg", UserAgent) 
     OR Find("emonitor", UserAgent) 
     OR Find("jeeves", UserAgent) 
     OR Find("sbider", UserAgent) 
     OR Find("findlinks", UserAgent) 
     OR Find("yahooseeker", UserAgent) 
     OR Find("mmcrawler", UserAgent) 
     OR Find("jbrowser", UserAgent) 
     OR Find("java", UserAgent) 
     OR Find("pmafind", UserAgent) 
     OR Find("blogbeat", UserAgent) 
     OR Find("converacrawler", UserAgent) 
     OR Find("ocelli", UserAgent) 
     OR Find("labhoo", UserAgent) 
     OR Find("validator", UserAgent) 
     OR Find("sproose", UserAgent) 
     OR Find("ia_archiver", UserAgent) 
     OR Find("larbin", UserAgent) 
     OR Find("psycheclone", UserAgent) 
     OR Find("arachmo", UserAgent) 
    > 
     <cfreturn true> 
    </cfif> 

    <cfreturn false> 
</cffunction> 
0

您可以使用BrowscapCFC。我使用我自己的检测库来专门识别坏蜘蛛,但是使用它来进行额外的检测,并且它是一个“Crawler”参数(以及“isMobileDevice”)。使用它可以识别(并可选择停止Web请求)在创建任何会话变量之前。

http://browscapcfc.riaforge.org/

注:通过进入http://browscap.org/

这里获取最新的browscap.ini文件返回的其他值:

  • ActiveXControls
  • 阿尔法
  • AolVersion
  • Backgroun dSounds
  • 贝塔
  • 浏览器
  • 评论
  • 饼干
  • 履带
  • CssVersion
  • Device_Maker
  • 设备名称
  • 框架
  • 的IFrame
  • JavaApplets
  • 的JavaScript
  • MajorVer
  • MinorVer
  • 平台
  • Platform_Description
  • PLATFORM_VERSION
  • RenderingEngine_Description
  • RenderingEngine_Name
  • RenderingEngine_Version
  • 个表
  • 的VBScript
  • 版本
  • Win16的
  • 的Win32
  • Win64的
  • isMobileDevice
  • isSyndicationReader