随着网站的越来越普及,我们开发出来的知识类网站更不希望被竞争对手爬虫,虽然现在网络中充斥着各种各样的蜘蛛,有合法的浏览器爬虫,以及不合法
的人为爬虫,所以攻防战一直都存在,我们只能更好的设定规则,防止我们的资料被泄露;曾几何时,爬虫是我们的利器,世事沧桑,我们又不得不反爬虫,这其中
只有真正领悟过的人才会懂。
- 对于WEB数据的安全,就多层设置门槛;对比物理数据安全只有多备份,多么痛的领悟;
什么是爬虫?
- 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。 互联网大数据时代,给予我们的是生活的便利以及海量数据爆炸式的出现在网络中。
什么又是反爬虫?
- 反爬虫:任何阻止爬虫程序访问 目标服务器资源或获取数据的行为。如限制ip频率,客户端身份验证,文本混淆,返回假数据等措施。
Go设置反爬机制
- (1)每个区域的ip,每天只能怕固定数量的条数,如:100条/天;让注册用户进行数据查询,可以多查一部分;非注册用户只能查10条/天;
- (2)设置网站的robots.txt协议,禁止爬虫设置;
- (3)账户的请求次数,1分钟限制次数;
- (4)对请求地址的UA进行判断,(UA的字面意思,用户代理,也就是说用户通过什么工具来访问网站。) User-Agent
- (5)针对请求地址中请求头的Referer判断,(Referer是包含在请求头里的,表示从哪个URL跳转到这个请求) Referer
- (6)针对请求判断是否登录,也就是cookie限制;
- (7)用户登录增加验证码认证;
- (8)黑名单机制
1、Nginx禁止爬虫访问的方法
if ($http_user_agent ~* "Scrapy|Baiduspider|Curl|HttpClient|Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser
|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSp
ider|Ezooms|^$"){
return 403;
}
如需跳转其他页面,只需要吧return 403 换成对于的地址即可,配置如下:
if ($http_user_agent ~* "Scrapy|Baiduspider|Curl|HttpClient|Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser
|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSp
ider|Ezooms|^$") {
return 301 https://yoursite.com;
}
如需禁止特定来源用户,配置如下:
if ($http_referer ~ "baidu\.com|google\.net|bing\.com") {
return 403;
}
如需仅允许GET,HEAD和POST请求,配置如下:
#fbrbidden not GET|HEAD|POST method access
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}
使用Nginx过滤网络爬虫 防盗链
现在的网络爬虫越来越多,有很多爬虫都是初学者写的,和搜索引擎的爬虫不一样,他们不懂如何控制速度,结果往往大量消耗服务器资源,导致带宽白白浪费了。
其实Nginx可以非常容易地根据User-Agent过滤请求,我们只需要在需要URL入口位置通过一个简单的正则表达式就可以过滤不符合要求的爬虫请求:
...
location / {
if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp") {
return 503;
}
# 正常处理
...
}
...
变量$http_user_agent是一个可以直接在location中引用的Nginx变量。~*表示不区分大小写的正则匹配,通过python就可以过滤掉80%的Python爬虫。
2、Apache禁用爬虫的配置
mod_rewrite模块确定开启的前提下,在.htaccess文件或者相应的.conf文件,添加以下内容:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (^$|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) [NC]
RewriteRule . - [R=403,L]