网站的基本反作弊策略(防抓取,验证码,防垃圾)
kevin.Zhu 发布于:2017-8-4 9:26 分类:运营 有 15 人浏览,获得评论 0 条
http://www.maben.com.cn/archives/843.html
【今日话题】聊聊网站的基本反作弊策略(防抓取,验证码,防垃圾) — 花生,黑夜路人
1. 验证码 固定时间操作次数限制 – weizhao
2. 这就是一个攻防的问题,没有百分百的解决方案,就看你的网站能给抓取的人带来多少利益,值不值得人家投入精力到攻防中去。 – 付坤
3. 防盗链,防止图片直接被别人直接复制或者通过程序抓取。 – 余辛未
4. 防盗链好做. 防抓取有点麻烦. 我能想到的就是在nginx层用lua和eedis做访问统计 – 花生
5. 防抓去确实麻烦啊,我看那些健康医疗网站用图片的办法来提高抓取的门槛 – skccc
6. 验证码大家就是看看如何混淆和防止ocr – 黑夜路人
7. 防垃圾在于内容频率和内容质量 – 黑夜路人
8. 页面内容可以做代码混淆,让他抓过去也是乱的 – 王斌科
9. 糗事百科以前的web版是这么干的. 但是对于网站来说,还是希望做SEO的 – 黑夜路人
10. 验证码加干扰像素,字体扭曲,不使用同一种字体 – twin
11. 貌似图片化是常规手段,包括京东的价格信息,百度文库和其它很多文档类网站全文图片化 – 水浸街
12. 前端加的透明,小字干扰标签,都是可以被过滤掉的 – twin
13. 现在验证码有打码平台API 简单的能自己识别,稍微复杂的可以打码平台。 只有提高验证码复杂度,不过对用户却不好。 哎,现在也只有这样。 – @理鱼
14. 防止刷票,目前我觉得最稳妥的就是绑定手机了 – @理鱼
15. ajax渲染 – flea
回: 那他抓你ajax接口,都不用解析html了 – twin
回: ajax防不了 – 朝沐金风
16. 抓取工具有几个特征 1. 通过正则匹配头尾,获取你的页面内容, 2. 短时间内高频率并发抓取 3. 与浏览器不同在于,抓取工具只获取页面内容,做字符串处理,不执行js,css代码. 针对抓取,可以根据他的行为,逐步提高门槛 – twin
17. 就是哈,可以在页面内加入一个小标签. 如果是是用户而没有加载这个小标签的话就抛验证码 – 花生
18. @twin scrapy可以设置多代理和抓取频率. @花生 这个和phantomjs结合完爆 – 朝沐金风
回: 是啊,phantomjs我用来做测试,太牛逼了,所以我是偏向于可以被抓取的 – twin
19. 那我能想到的就是两种结合,那就是访问量的统计+标签插入. 这样能干掉绝大多数没技术含量的抓取 – 花生
20. ip黑名单 – flea
21. https://www.centos.bz/2012/12/openresty-nginx-block-cc-attack-deploy/ OpenResty(nginx扩展)实现防cc攻击 – 花生
回: 差不多吧,主要还是频率控制 – 朝沐金风
22. 执行js未执行加验证码, 其实也容易过, 毕竟是客户端传入 – @理鱼
23. 目的都是增加复杂度,让抓取的人考虑,要不要投入精力去搞 – 付坤
24. 先说频率控制 就是防抓取 方案很多 有接入防火墙级别 有接入代理服务器级别 有web服务器级别 有应用级别. 我们能够干涉的只能是应用级别和代理(web服务器)级别的 – 黑夜路人
25. 只要想抓取没有抓不到的,只有通过时间控制。 – 原
26. 先说应用级别怎么做. 在访问页面的时候,你记录一下什么ip啊session之类的特征 – 黑夜路人
27. 对于那种职业化的抓取就没办法了,不管是ip,还是登录才允许访问的账号,都储备着一大批资源,跟这批人斗最累了。 – 付坤
28. 我说一个腾讯某部门需要百度的一些数据,抓取。 用 c++写了一个 http 中间件。 爬虫连接这个中间件, 他们机器多ip多,开上代理,抓的欢乐。 – @理鱼
29. 限制ip访问频率,加验证码,生成图片,脚本处理。 – 原
30. 我有个朋友做抓取的,ip很好搞的,他就搜集网上的sock5代理,能有七八千个ip – lalala
31. 从一些免费代理站上一抓一批,检测一下可用性,再用这批抓来的ip去抓别的 – 付坤
32. 抓取最牛逼的就是用不完的代理ip,任何防抓策略都没用 – 花生
33. 这个我也很好奇,以前做过一个投票网站,有人刷票,防IP根本防不住,全世界各地的IP都有,这那么多代理他们是从哪弄的 – 马犇
回: 五十块钱能保证你同时有几千个ip可用,保持一个月 – 付坤
回: 免费代理网站多的是 – lalala
回: 抓肉鸡的抓完了当代理ip 卖。 淘宝上多的是 – 付坤
34. ipv6后更难防止 – 朝沐金风
35. nginx+lua 可以把不同的cookie 扔到特定的 机器上 比如维护一个小集群A,专门处理这些疑似抓站的ip。虽然不能彻底防范,但是从某种程度上可以不影响正常用户的访问。 – hello
36. 纯的防抓一个页面的内容是个伪命题,或者是在帐号体系下的防抓,防止一些僵尸帐号,广告行为可能还可以。 – lalala
37. 我也觉得验证码最靠谱. 其他方式都能比较低成本的绕过,就图片识别没那么成熟 ,,技术含量也高些,也没多少程序员对这方面有深入的了解. 验证码,可以算防止高频访问的一个低成本,高效果的方案了 – york
回: 是啊,对用户的误删也相对较小 – 花生
38. 大家有没有各渠道针对app刷量的防作弊经验呢 – rain
回: lua waf 好几个项目 可以自己综合下. App刷量。设备可以伪造. 绑定手机有手机号码库平台. 上次美团一元看电影 被刷了多少, 我可以说大部分都是被刷量了.防止作弊,的加大统计力度,人工审查力度 – @理鱼
39. 问: 大家怎么防垃圾留言的呢? – twin
回: WordPress有个第三方插件 – 萝莉控夫斯基
40. 1、提高发帖成本,防止刷贴,出验证码,不过要结合体验,用一段时间的频率来判断,比如一分钟3次。
2、增加审核机制,反正在大天朝下,只要想做大,内容审核是必不可少的开支,审核机制策略各公司不同,大体上先发后审和先审后发(审核机制可能都能提个讨论话了) – XiangZ
41. 审核用到的技术各公司应该也不一样,我主要见过的有几种:
1、正则做关键词匹配
2、AC自动机做匹配
3、机器学习方面(听过,没接触过)
关键词词库也会做一些不同的分级
全自动的处理没见过,之前做的主要是让审核组维护一套词库 – XiangZ
42. 词库是基本,但是基本上无效. 真正spam你的,不能用词库搞定 – 王瑞珩
43. 人的识别和联想都太厉害了,肯定没办法说完美防得住的,只能是提高别人机器搞你的成本,对于手动spam的,可以通过一些组合策略来处理,还有一些猥琐的手段,比如蜜罐,让他自己玩的hi,减少对系统和其他用户的干扰。 – XiangZ
44. wp的第三方插件叫 Askimet?好像是这个吧 – 青衫隐_刘
45. 这段时间也一直在研究这方面的东西,比较原始的就是根据用户id,用户ip控制访问频率,可以根据秒,分,时等不同粒度进行控制. 这样基本可以挡住大部分啦 – 项超
46. 没有人考虑通过cookie过滤吗. nginx+lua的方式 – hello
47. 但是对于分布式web服务,也就是非单台服务器的情况。对总数的粒度控制需要一些解决办法 – 项超
48. 在proxy层做哈希,固定的uid只会到固定的后端服务!但是这个需要做高可用! – 项超
49. 前面hello兄提到ngx_lua,剛好我主要開發平台也是ngx_lua/openresty,我目前做法是這樣:
ngx_lua在rewrite phase裡面寫一個lua用來做認證機制,認證主要是對request header or cookie進行decrypt然後獲取真實用戶uid, 最後變成一個uid set成環境變數讓後面的lua甚至PHP可以直接信任這個uid進行業務邏輯操作。
也就是 rewrite_by_lua ‘header_auth.lua’; 這樣來做authentication
content_by_lua 這部分進行業務主邏輯處理, 或者proxy_pass給PHP甚至nodeJS處理
最後
log_by_lua 這個phase做行為的記錄加總或頻率判斷等邏輯。
舉例,倘若有一個API你不希望被某個mobile device_id,uid, 或某個IP,或某個country_code進行頻繁的存取,你可以在log phase這邊把device_id/uid/ip/country_code這些記錄incr到ngx.shared.DICT同時proxy_pass給另外一個nginx handler, 這個handler往後台的redis進行加總,一旦加總數量到一個threshold之後,在自己的ngx.shared.DICT設一個blacklist flag, 如此接續的請求進來, rewrite_by_lua 這邊看到ngx.shared.DICT這個blacklist flag,就可以直接return 403或一個status:‘fail’ 的JSON返回
如此,rewrite phase處理認證跟ACL control, content phase處理主業務邏輯,log phase處理稽核與記錄,logging結果同時送往redis進行加總判斷,最後把判斷結果標記在本機的ngx.shared.DICT,如此就變成一個很有彈性的application firewall了,而主程式只要專注在業務邏輯即可,其他都不用管。這是我覺得挺不錯的架構。 – Pahud