http://wx1.sinaimg.cn/large/7e8b4ac8ly1ffbewcp4wrj20wl0d50y1.jpg
-
- 对于封禁爬虫,我只会屏蔽 IP 和屏蔽 UA 两种,并且这个 UA 屏蔽起来似乎误伤面积会很大。
问题来了,这么写
if ($http_user_agent ~ 抗投诉服务器"Mozilla/5.0" ) {
return 403;
}
是不是所有 Mozilla/5.0 都进不来了。
不会不懂了,请 dalao 明示,嘿嘿,谢谢,周末愉快~
道高一尺魔高一丈
我觉得也是 = = 已送去感谢!!
只要不是把服务器采挂了,对方采就让它采。万一对方是用真实浏览器采的呢,怎么区分
频度高的封 IP,频度低的就只能任由它,根本没有简单的处理的办法
如果到采挂了的底部,是不是挂 CDN 会好点?
还好现在不疼不痒的。
已感谢!
你可以看到它们都是在一个 C 段下
很直接的一个做法:用 redis 之类做一个记录 key 是 x.x.x.0/24,超过了一个阈值就封禁这个 C 段
更复杂的话 可以用前端再做一层验证
挂 CDN 能应对更大规模的开采,如果你的源服务器应付不了那么大的访问量的话。
如果是固定 IP 大规模开,直接排一下序把最顶上的用 iptables 干掉,或者采用某些手段限制访问频次。不痛不痒就算了,随便让它开采。本来开放的 web 就是让人访问的,人和机器访问的界限有时候很模糊。
回答很有帮助,不管是技术还是思路,谢谢。
谢谢,我去学习下如何做一个访问频率。V2 就好棒,那天我机械键盘 F5 回弹卡住了,一直刷的封了 IP - - 破键盘~买到残次品了。
把他这几个 IP 封一段时间,重点照顾下这几个 IP,每秒超过 5 个请求就屏蔽一天,让他学乖点,一秒只请求你网站一次
关于防爬虫有个想法
可不可以在页面添加几个链接,用 css 隐藏掉(或者用 js 禁止点击?),保证正常浏览网页的人不会去访问这几个链接
有用户访问其中两个或以上链接的时候就暂时禁掉这个 ip [._________.]⊿
$http_user_agent='Mozilla/5.0'
当然这只是临时的方法。别人换个 UA 你就没办法了。
浏览器预读会不会预读到
11 楼的方法可行,但也可能误伤一些待预缓存功能的浏览器的正常流量;
其实还可以反向扩展:
对页面里加载的一些静态资源的访问可以记录下来,如果访问了页面又没访问静态资源的 ip,可以设计一套规则给 ban 掉(或弹验证码),也能防止一部分非模拟浏览器的爬虫
无解的。BAT 都不能防止。也只能靠限制 IP,出验证码这种方案。
不要 regex 匹配,直接检查等于
没有浏览器会只有这一段 UA
另外,这种不是 Nginx 强项,if is evil
设置个蜜罐页面吧,列表页面里面增加一个隐藏连接,链接的格式和正常的一样,但是在 css 中做限制不显示出来。
如果有 ip 访问蜜罐页面,直接小黑屋伺候。
正常用户是不会去访问蜜罐页面的,误伤率会比较低。
埋点。。 加 js 验证。。ip+url 的 hash 漏桶。。 但都只是提高爬的门槛,仅此而已
让他爬!
简单有效的方法就是限流了,每分钟访问超过多少次就屏蔽一段时间,或者给他个验证码输,输入对了就重置请求频次,错了就屏蔽 ip,大公司大多都这么搞的吧
爬虫对抗我觉得可以尽量让对方察觉的不要那么明显而达到目的
1.做一个 Qos 去限速,不建议封 ip 而是给一堆假数据给对方,而我方可以减少内容被盗并且减少数据库压力, 这样采集的人会过一段时间发现自己采集的内容是假的,会花很长时间调试从而增加对方的痛苦值
2.页面 cookie 跟踪,处了首页以外,每次访问其它页面都需要上报上一次的 cookie 里面的 key,否则不让访问(如果这样会导致百度这些也无法爬行,下面会将)
3.前端页面使用 JS 渲染,对百度和 Google 这些爬虫给一个特定的页面,但是要校验 ip,如果 UA 和 ip 不符合的给予半真半假的数据(可以是 2:8 的比例, 也可以是 1:9 )
4.JS 页面混淆压缩,使用多层嵌套,使用随机的函数名和变量
5.对特定浏览器使用浏览器特性检测,比如用 canvas 检测浏览器指纹,还有 IP 的鼠标点击事件或滚轮事件,如果在规定时间内一次都没有,必定是爬虫
先说这么多方法,如果这些都还能过,可以尝试招安对方 +_+
再各种防御办法,也挡不住代理池。
可以换格式,用在前端用 js + 随机 key 解密再展示。
爬虫把自己伪装的足够像一般的浏览器的时候,所有的屏蔽方式就失效了,你难道要影响正常访问吗?
大部分爬虫不会用 v8, 所以 js,images, css 的不会加载。
利用这个思路, 我写过 python 脚本是,分析服务器 apache 日志, 如果一个 IP 在一天内达到多少访问量, 这个 IP 不属于 google, msn 之类的。 那么判断他请求的 URL 资源类型, 如果 非 js, images, css 的请求量大于一半, 直接把 IP 递交给防火墙。
什么前端渲染,混淆都挡不住抓包软件的黑手
ua 的你就放弃吧。
我去按照你的思路百度学习一下如何操作,谢谢哈!
对啊,图中的 UA 一封,基本就全封了,很机智又很巧妙的设定。
厉害了大哥哥,我只会封 IP 和 UA。因为……我是个渣渣的 FTP 操作员!
好,就这么定了。
我去学习一下怎么限流,谢谢思路。
你这一整套组合拳太狠了。。
如果一个小区用一个公网 IP,你的做法是不是会误伤他人?非常奇怪为什么那么多人喜欢封 ip 这种粗暴的方式。
添加暗链接,访问了直接 ban 三分钟- -或者 JS 监听鼠标,方向键。回调添加识别参数
如果支持正则表达式的话
应该不会
这么写 ^Mozilla/5\.0$
没有加多位通配符 .* 的话 其他包含 Mozilla/5.0 的 UA 不会一并被屏蔽.
当然这不是长久之计,爬虫和反爬虫就如病毒和杀软……
30说的算是很高端的了。
IP 对方可以扫代理
UA 的话,提供常见浏览器 UA 的网站很多,可以来回改,伪装成正常的浏览器.
我写爬虫从来都是把浏览器访问你网站的所有 header 复制下来,你来防我吧,防爬虫就是一个伪命题,做的足够好的反爬基本最后把用户和蜘蛛干跑了
现在不是说都是超频率返回假数据么?
之前见过一个网站,需要和站长线下见面,提交身份证和银行流水证明,一顿饭之后通过面试拿到登陆网站的 token 卡。一个下载站做成这样也很奇葩了
链接可以动态拼接的,每次请求会产生一个 sessionID 对应一个密钥( session 是有过期时间的),这个密钥产生一个加密链接这个会去请求一个数据库真实的地址,响应的结果的正文放到 DOM 里面随机插入放入不规则的 DIV 里面,你抓包每次地址都不一样,抓包作用有限,逼着你去分析恶心的 JS,如果非要较真的话,我去非洲找 1000 个老黑手动采集,你一点办法没有
太神奇了 还记得 URL 吗
网站上放一堆带木马的小电影网站广告
并没有什么用,人家根本不会下载和解析,如果非要造成困扰,是给一个死递归的函数让浏览器解析,让其爆栈
对于 怀疑对象 用验证码来验证一下,如果是人 就放到白名单里面
"会花很长时间调试从而增加对方的痛苦值",这也太狠毒了点。。。
哦呵呵
真是浏览器就跳验证码啊,google 不经常怀疑你是机器人
基于 ip 频次的惩罚式封禁
吐点脏数据
如果要精确,只有靠 cf,aka 这种 cdn 的大数据,你自己判断总有失误的时候
我是最近总有啥 b 扫 dede 的漏洞,尝试 post 注入 plus 目录下的文件。。。我也是醉了
我说的是对付你那 1000 个老黑
那已经不是反爬虫了,你成了挂马网站了.....
爬虫会自动从各种 UA 和 ip 代理池中随机挑选一个,你的方法无效,至于密罐无法应对精准采集,会跳过蜜罐的
如果想完全屏蔽爬虫,页面内容都通过 ajax 异步加载进去
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 30 --hitcount 10 --rttl -j DROP
我那个人搞的没啥卵用连后台都没有的网站天天被各种爬虫和攻击工具扫……你这还算好的了……
感觉常见手段就是出验证码了。能在 iptables 断下自然是最好的
这防火墙规则是干啥滴?
80 端口新建连接限制 30 秒内 10 个连接,否则丢包。
哇哦。66666
暴力点,1 个 ip 1h 就只能访问 50 次,超过了,就拉黑 IP 3h,期间页面正常渲染,重要内容转换为乱码
我自己的经验就是建议你不要限制 UA,其次只要限制 ip 短时间内的访问量即可,不要限制全天多少。因为我们之前公司项目做测试的时候 如果你的项目定向流量很大,那么很容易误伤很多正常流量,比如说有很多免费的公共 WIFI 比如公车 地铁上的 wifi ip 都是固定几个 这样的话就会造成很多自然日很多合法流量被禁止。所以只要访问量不对你服务器进行大量冲击 采集就采集吧。
有些网站你不开 JS,内容根本就出不来。。。
那蜘蛛呢大哥哥?
我是这么做的
1.按规则过滤,比如超 5000 次封一段时间,还超就封一天,跳验证码
2.验证码的页面带 sleep,每次等够 5s 才响应
3.在验证码页面还强刷的,有一定几率跳到各大镜像网站的 iso 包,让他去下载
这么做下来,数量级少了,但是他还说坚持不懈,我也没办法了。
如果不停的换 ip 是没有方法防的 , 我的抓取就是用的动态 更换 ip,动态更换 IP 策略 DEMO https://github.com/hizdm/dynamic_ip