windows服务器怎么反爬虫,第1张

手工识别和拒绝爬虫的访问

相当多的爬虫对网站会造成非常高的负载,因此识别爬虫的来源IP是很容易的事情。最简单的办法就是用netstat检查80端口的连接:

netstat -nt | grep youhostip:80 | awk '{print $5}' | awk -F":" '{print $1}'| sort | uniq -c | sort -r -n

这行shell可以按照80端口连接数量对来源IP进行排序,这样可以直观的判断出来网页爬虫。一般来说爬虫的并发连接非常高。

如果使用lighttpd做Web

Server,那么就更简单了。lighttpd的mod_status提供了非常直观的并发连接的信息,包括每个连接的来源IP,访问的URL,连接状

态和连接时间等信息,只要检查那些处于handle-request状态的高并发IP就可以很快确定爬虫的来源IP了。

拒绝爬虫请求既可以通过内核防火墙来拒绝,也可以在web server拒绝,比方说用iptables拒绝:

iptables -A INPUT -i eth0 -j DROP -p tcp --dport 80 -s 8480460/24

直接封锁爬虫所在的C网段地址。这是因为一般爬虫都是运行在托管机房里面,可能在一个C段里面的多台服务器上面都有爬虫,而这个C段不可能是用户宽带上网,封锁C段可以很大程度上解决问题。

通过识别爬虫的User-Agent信息来拒绝爬虫

有很多爬虫并不会以很高的并发连接爬取,一般不容易暴露自己;有些爬虫的来源IP分布很广,很难简单的通过封锁IP段地址来解决问题;另外还有很多

各种各样的小爬虫,它们在尝试Google以外创新的搜索方式,每个爬虫每天爬取几万的网页,几十个爬虫加起来每天就能消耗掉上百万动态请求的资源,由于

每个小爬虫单独的爬取量都很低,所以你很难把它从每天海量的访问IP地址当中把它准确的挖出来。

这种情况下我们可以通过爬虫的User-Agent信息来识别。每个爬虫在爬取网页的时候,会声明自己的User-Agent信息,因此我们就可以

通过记录和分析User-Agent信息来挖掘和封锁爬虫。我们需要记录每个请求的User-Agent信息,对于Rails来说我们可以简单的在

app/controllers/applicationrb里面添加一个全局的before_filter,来记录每个请求的User-Agent信

息:

loggerinfo "HTTP_USER_AGENT #{requestenv["HTTP_USER_AGENT"]}"

然后统计每天的productionlog,抽取User-Agent信息,找出访问量最大的那些User-Agent。要注意的是我们只关注那

些爬虫的User-Agent信息,而不是真正浏览器User-Agent,所以还要排除掉浏览器User-Agent,要做到这一点仅仅需要一行

shell:

grep HTTP_USER_AGENT productionlog | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko' | sort | uniq -c | sort -r -n | head -n 100 > botlog

统计结果类似这样:

57335 HTTP_USER_AGENT Baiduspider+(+http://wwwbaiducom/search/spiderhtm)

56639 HTTP_USER_AGENT Mozilla/50 (compatible; Googlebot/21; +http://wwwgooglecom/bothtml)

42610 HTTP_USER_AGENT Mediapartners-Google

19131 HTTP_USER_AGENT msnbot/20b (+http://searchmsncom/msnbothtm)

从日志就可以直观的看出每个爬虫的请求次数。要根据User-Agent信息来封锁爬虫是件很容易的事情,lighttpd配置如下:

$HTTP["useragent"] =~ "qihoobot|^Java|Commons-HttpClient|Wget|^PHP|Ruby|Python" {

urlrewrite = ( "^/()" => "/crawlerhtml" )

}

使用这种方式来封锁爬虫虽然简单但是非常有效,除了封锁特定的爬虫,还可以封锁常用的编程语言和HTTP类库的User-Agent信息,这样就可以避免很多无谓的程序员用来练手的爬虫程序对网站的骚扰。

还有一种比较常见的情况,就是某个搜索引擎的爬虫对网站爬取频率过高,但是搜索引擎给网站带来了很多流量,我们并不希望简单的封锁爬虫,仅仅是希望降低爬虫的请求频率,减轻爬虫对网站造成的负载,那么我们可以这样做:

$HTTP["user-agent"] =~ "Baiduspider+" {

connectiondelay-seconds = 10

}

对百度的爬虫请求延迟10秒钟再进行处理,这样就可以有效降低爬虫对网站的负载了。

通过网站流量统计系统和日志分析来识别爬虫

有些爬虫喜欢修改User-Agent信息来伪装自己,把自己伪装成一个真实浏览器的User-Agent信息,让你无法有效的识别。这种情况下我们可以通过网站流量系统记录的真实用户访问IP来进行识别。

主流的网站流量统计系统不外乎两种实现策略:一种策略是在网页里面嵌入一段js,这段js会向特定的统计服务器发送请求的方式记录访问量;另一种策

略是直接分析服务器日志,来统计网站访问量。在理想的情况下,嵌入js的方式统计的网站流量应该高于分析服务器日志,这是因为用户浏览器会有缓存,不一定

每次真实用户访问都会触发服务器的处理。但实际情况是,分析服务器日志得到的网站访问量远远高于嵌入js方式,极端情况下,甚至要高出10倍以上。

现在很多网站喜欢采用awstats来分析服务器日志,来计算网站的访问量,但是当他们一旦采用Google

Analytics来统计网站流量的时候,却发现GA统计的流量远远低于awstats,为什么GA和awstats统计会有这么大差异呢?罪魁祸首就是

把自己伪装成浏览器的网络爬虫。这种情况下awstats无法有效的识别了,所以awstats的统计数据会虚高。

其实作为一个网站来说,如果希望了解自己的网站真实访问量,希望精确了解网站每个频道的访问量和访问用户,应该用页面里面嵌入js的方式来开发自己

的网站流量统计系统。自己做一个网站流量统计系统是件很简单的事情,写段服务器程序响应客户段js的请求,分析和识别请求然后写日志的同时做后台的异步统

计就搞定了。

通过流量统计系统得到的用户IP基本是真实的用户访问,因为一般情况下爬虫是无法执行网页里面的js代码片段的。所以我们可以拿流量统计系统记录的

IP和服务器程序日志记录的IP地址进行比较,如果服务器日志里面某个IP发起了大量的请求,在流量统计系统里面却根本找不到,或者即使找得到,可访问量

却只有寥寥几个,那么无疑就是一个网络爬虫。

分析服务器日志统计访问最多的IP地址段一行shell就可以了:

grep Processing productionlog | awk '{print $4}' | awk -F'' '{print $1""$2""$3"0"}' | sort | uniq -c | sort -r -n | head -n 200 > stat_iplog

然后把统计结果和流量统计系统记录的IP地址进行对比,排除真实用户访问IP,再排除我们希望放行的网页爬虫,比方Google,百度,微软msn爬虫等等。最后的分析结果就就得到了爬虫的IP地址了。以下代码段是个简单的实现示意:

whitelist = []

IOforeach("#{RAILS_ROOT}/lib/whitelisttxt") { |line| whitelist << linesplit[0]strip if line }

realiplist = []

IOforeach("#{RAILS_ROOT}/log/visit_iplog") { |line| realiplist << linestrip if line }

iplist = []

IOforeach("#{RAILS_ROOT}/log/stat_iplog") do |line|

ip = linesplit[1]strip

iplist << ip if linesplit[0]to_i > 3000 && !whitelistinclude(ip) && !realiplistinclude(ip)

end

Reportdeliver_crawler(iplist)

分析服务器日志里面请求次数超过3000次的IP地址段,排除白名单地址和真实访问IP地址,最后得到的就是爬虫IP了,然后可以发送邮件通知管理员进行相应的处理。

网站的实时反爬虫防火墙实现策略

通过分析日志的方式来识别网页爬虫不是一个实时的反爬虫策略。如果一个爬虫非要针对你的网站进行处心积虑的爬取,那么他可能会采用分布式爬取策略,

比方说寻找几百上千个国外的代理服务器疯狂的爬取你的网站,从而导致网站无法访问,那么你再分析日志是不可能及时解决问题的。所以必须采取实时反爬虫策

略,要能够动态的实时识别和封锁爬虫的访问。

要自己编写一个这样的实时反爬虫系统其实也很简单。比方说我们可以用memcached来做访问计数器,记录每个IP的访问频度,在单位时间之内,

如果访问频率超过一个阀值,我们就认为这个IP很可能有问题,那么我们就可以返回一个验证码页面,要求用户填写验证码。如果是爬虫的话,当然不可能填写验

证码,所以就被拒掉了,这样很简单就解决了爬虫问题。

用memcache记录每个IP访问计数,单位时间内超过阀值就让用户填写验证码,用Rails编写的示例代码如下:

ip_counter = Railscacheincrement(requestremote_ip)

if !ip_counter

Railscachewrite(requestremote_ip, 1, :expires_in => 30minutes)

elsif ip_counter > 2000

render :template => 'test', :status => 401 and return false

end

这段程序只是最简单的示例,实际的代码实现我们还会添加很多判断,比方说我们可能要排除白名单IP地址段,要允许特定的User-Agent通过,要针对登录用户和非登录用户,针对有无referer地址采取不同的阀值和计数加速器等等。

此外如果分布式爬虫爬取频率过高的话,过期就允许爬虫再次访问还是会对服务器造成很大的压力,因此我们可以添加一条策略:针对要求用户填写验证码的

IP地址,如果该IP地址短时间内继续不停的请求,则判断为爬虫,加入黑名单,后续请求全部拒绝掉。为此,示例代码可以改进一下:

before_filter :ip_firewall, :except => :test

def ip_firewall

render :file => "#{RAILS_ROOT}/public/403html", :status => 403 if BlackListinclude(ip_sec)

end

我们可以定义一个全局的过滤器,对所有请求进行过滤,出现在黑名单的IP地址一律拒绝。对非黑名单的IP地址再进行计数和统计:

ip_counter = Railscacheincrement(requestremote_ip)

if !ip_counter

Railscachewrite(requestremote_ip, 1, :expires_in => 30minutes)

elsif ip_counter > 2000

crawler_counter = Railscacheincrement("crawler/#{requestremote_ip}")

if !crawler_counter

Railscachewrite("crawler/#{requestremote_ip}", 1, :expires_in => 10minutes)

elsif crawler_counter > 50

BlackListadd(ip_sec)

render :file => "#{RAILS_ROOT}/public/403html", :status => 403 and return false

end

render :template => 'test', :status => 401 and return false

end

如果某个IP地址单位时间内访问频率超过阀值,再增加一个计数器,跟踪他会不会立刻填写验证码,如果他不填写验证码,在短时间内还是高频率访问,就

把这个IP地址段加入黑名单,除非用户填写验证码激活,否则所有请求全部拒绝。这样我们就可以通过在程序里面维护黑名单的方式来动态的跟踪爬虫的情况,甚

至我们可以自己写个后台来手工管理黑名单列表,了解网站爬虫的情况。

关于这个通用反爬虫的功能,我们开发一个开源的插件:https://githubcom/csdn-dev/limiter

这个策略已经比较智能了,但是还不够好!我们还可以继续改进:

1、用网站流量统计系统来改进实时反爬虫系统

还记得吗?网站流量统计系统记录的IP地址是真实用户访问IP,所以我们在网站流量统计系统里面也去操作memcached,但是这次不是增加计数

值,而是减少计数值。在网站流量统计系统里面每接收到一个IP请求,就相应的cachedecrement(key)。所以对于真实用户的IP来说,它

的计数值总是加1然后就减1,不可能很高。这样我们就可以大大降低判断爬虫的阀值,可以更加快速准确的识别和拒绝掉爬虫。

2、用时间窗口来改进实时反爬虫系统

爬虫爬取网页的频率都是比较固定的,不像人去访问网页,中间的间隔时间比较无规则,所以我们可以给每个IP地址建立一个时间窗口,记录IP地址最近

12次访问时间,每记录一次就滑动一次窗口,比较最近访问时间和当前时间,如果间隔时间很长判断不是爬虫,清除时间窗口,如果间隔不长,就回溯计算指定时

间段的访问频率,如果访问频率超过阀值,就转向验证码页面让用户填写验证码。

最终这个实时反爬虫系统就相当完善了,它可以很快的识别并且自动封锁爬虫的访问,保护网站的正常访问。不过有些爬虫可能相当狡猾,它也许会通过大量

的爬虫测试来试探出来你的访问阀值,以低于阀值的爬取速度抓取你的网页,因此我们还需要辅助第3种办法,用日志来做后期的分析和识别,就算爬虫爬的再慢,

它累计一天的爬取量也会超过你的阀值被你日志分析程序识别出来。

计算思维又叫构造思维,以设计和构造为特征,以计算机学科为代表的。它是运用计算机科学的基础概念去求解问题、设计系统和理解人类行为。其本质是抽象和自动化,通过约简、嵌入、转化和仿真等方法,把一个看来困难的问题重新阐释成一个我们知道怎样解决的问题,如同“读、写、算”能力一样,计算思维也是我们每个人都必须具备的思维能力。

计算思维是一种递归思维。它是并行处理。它是把代码译成数据又把数据译成代码。对于别名或赋予人与物多个名字的做法,它既知道其益处又了解其害处。对于间接寻址和程序调用的方法,它既知道其威力又了解其代价。它评价一个程序时,不仅仅根据其准确性和效率,还有美学的考量,而对于系统的设计,还考虑简洁和优雅。

天锐绿盾自动智能透明加密防泄密软件系统

01 防止公司内部数据泄密

通过动态加解密技术,有效防止公司内部数据泄密。即员工在创建、编辑文档时会被自动加密存放在硬盘上,防止员工故意或由于疏忽而造成泄密或对文件恶意破坏。

管理思路>>

● 不改变员工使用习惯、不改变文件格式、不改变公司网络结构、不降低员工办公效率、不封闭公司网络、不封闭公司电脑的外设端口;

● 企业内部形成类似一个“用户无感知的加密网”,员工未经授权,不管任何方式,数据离开了公司的环境,都无法正常查看;

● 只有经过公司审批后,用户才可在授予的权限范围内,访问该文件;

● 做到公司内部文档交互自由流通,无任何影响。

02 防止机密文件在公司内部扩散

管理思路>>

● 被授权的员工获得该机密文件后,打开时必须输入授权人设定的正确口令,才能访问该机密文件;

● 被授权的员工经过合法的身份认证后,也只能在赋予的权限范围内访问该机密文件;

● 机密文件访问权限控制包括:阅读次数、打印次数、是否可截屏、是否可编辑、阅读时间、禁止删除、过期自毁等。

03 防止员工外出办公泄密

管理思路>>

短期外出:方便员工晚上回家或者周末在家也能正常加解密文件,不需要额外的操作。

长期外出:在规定的期限内,携带笔记本在外也可以正常工作,超过期限,将无法打开加密文档。

永久外出:对在分公司或办事处用户,可使用永久离线,保证总部与分部之间的资料都是加密的,可以互相访问,又可以控制分部的资料,防止外泄。

04 防止员工离职泄密

管理思路>>

● 员工在新建、编辑重要文件(如:CAD文件、设计图纸等)时,服务器自动对重要文件备份到服务器指定隐藏目录下保存,避免员工离职时有意删除或格式化电脑,给企业带来损失;

● 通过对公司电脑上的数据透明加密,有效地避免了员工离职时想带走大量重要资料的行为。

05 防止文件外发后泄密

与外界进行频繁的信息沟通已成为公司必要的一种业务模式,这些交互的信息可能会涉及企业核心信息,而这些信息一旦流出企业就面临着失控的风险。为了解决对外业务交互的后顾之忧,我们提供信息对外发布管理思路:

管理思路>>

● 当需要给客户或合作伙伴外发文件时,首先向上级领导进行外发申请,而后才有权将该文件打包成受控文件,外发给客户合作伙伴;

● 被授权的客户或合作伙伴获得该受控外发文件后,打开时需先进行合法的身份认证,才能在授予的权限范围内访问;

● 身份认证的方式包括:口令认证、机器码认证、联网认证;

● 访问权限包括:阅读次数、可打印、可截屏、可编辑、阅读期限、过期自毁、回收等;

● 被授权的客户或者伙伴在访问该文件时,无需在自己的电脑上安装任何插件,即可访问。

06 防止电脑丢失泄密

在计算机广泛使用的今天,笔记本电脑的丢失会给我们带来很大的麻烦,除了经济损失外,电脑中存储的涉密资料及个人隐私的泄密会成为另一个潜在的威胁,有可能给我们带来无可挽回的损失。数据的加密保证了在笔记本电脑丢失的情况下,电脑中存储的资料仍然不被泄密。

07 防止员工打印泄密

管理思路>>

● 对员工是否可打印、可在哪台打印、打印何类型文档,做到事前控制; 

● 对打印的内容进行记录,并提供详细打印日志报表,便于审计; 

● 提供水印功能起到防伪的作用。

08 防止移动终端办公泄密

与iPad 、iPhone结合,实现通过iPad 、iPhone方式在线访问公司服务器的加密数据,提高公司领导层的办公效率。

09 避开服务器复杂环境,防止服务器数据泄密

管理思路>>

● 公司内部加密数据上传到公司指定的白名单服务器时,数据会被自动解密成明文后保存在服务器上;

● 员工将服务器上明文数据下载到公司内部终端时,数据被自动加密,避免数据泄密;

● 员工在公司外在线访问公司服务器上的数据时,可正常访问;

● 当员工在公司外下载服务器上的明文数据时,下载被自动禁止,避免明文数据下载后泄密。

10 桌面管理降低泄密风险

管理思路>>

● 对终端硬件使用规范管理:U盘、刻录机、打印机等使用规范化管理;

● 对终端软件使用规范管理:规定企业不同的部门电脑统一安装哪些软件,其他的所有软件都是禁止安装;

● 对员工网络行为规范化管理:对员工的上网行为规范化管理;

● 对员工终端软硬件环境、上网行为规范管理后,让员工潜移默化地养成良好的工作习惯,提高保密意识和办公效率,降低数据泄密风险。

最终实现>>

● 对软硬件环境规范管理、对员工网络行为规范管理,让员工养成良好的工作习惯,提高保密意识,降低泄密风险;

● 对内部文件透明加密后,保持现有的工作模式和操作习惯不变,不改变文件格式、不封闭网络、外设端口,保证办公效率,实现数据防泄密管理,形成“对外受阻,对内无碍”的管理效果;

● 未经公司授权允许,数据不管以何种方式离开公司均无法正常访问。只有经过合法流程审批后,才能在公司授予的权限范围内访问;

● 全程监督、跟踪、记录所有员工的全部操作,实时回溯泄密全过程。

深圳德人合科技有限公司提供软件系统及技术支持

山东省考点高考监控保存在服务器里。山东省考点高考监控保存在服务器里的原因有以下几点:

1、确保公平性:高考是一项重要的考试,其公平性和公正性备受关注。通过将监控录像保存到服务器中,可以确保高考的整个过程没有被人为篡改或出现其他问题,从而保证高考的公平性和公正性。

2、防止作弊:高考是评估学生学业水平的重要途径,而作弊是一种不正当的行为。通过保存监控录像,可以有效地防止考生通过作弊获得不当利益,保证高考的公平性和公正性。

3、便于事后调查:高考是一项严肃的考试,任何违规行为都是不被允许的。通过保存监控录像,可以在考试结束后对考场情况进行回溯和调查,以便及时发现和处理违规行为。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » windows服务器怎么反爬虫

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情