https://zr9558.com/2016/10/27/antispamindustry/

来自知乎

帅帅 产品经理
423 人赞同
Anti-spam
@周源的邀请,我现在才回应,见谅。做反 Spam 工作的人,要禁得住诱惑耐得住寂寞扛得住压力受得了委屈,本想路过算了。但看看互联网上这块内容都比较少,看到有人说自己会说些干货,结果找到很少,做 Anti-spam 的人不多,也时常不受重视,其实交流又非常重要,基于此,我就从产品的角度谈谈这块自己的一点积累,抛砖引玉。
Anti-spam 是数据分析工作的一个方向,非常考验一个产品人员对数据整体和局部的把握,如果对产品无爱,对数据,特别是数据的细节刨根问底不着迷,这事儿做不好。
做 Anti-spam工作,只掌握了数据分析的方法是不够的,还要加入足够的产品市场人员的思维——对用户需求的分析,对用户需求的理解,对人性的理解,多换位思考。有了这些才能真正的把基于XX产品的反 Spam 工作做好。这也是一般做了几年反 Spam 工作后,能力提升瓶颈的关键点。
开始正文,先分4部分:具体工作怎么做,如何进阶,反spam产品经理还需要具备哪些能力,我个人的经验。
1. 具体工作怎么做
1.1 做数据分析
第一次接触这个工作的人,一般压力很大,都是人肉通过后台工具解决spam问题解决不了或者这个问题已经严重的威胁产品安全了,希望你能解决,如果你幸运的解决了一两个问题,更希望你能成为黯淡无光黑夜里的救星。
在很多人指手画脚,投诉各种问题的时候,自己不要乱,一定先只做一件事件——数据分析,抽XX产品10万个数据分析分析。
目的:了解目前整体的情况,对问题严重性,多样性,有足够的认识。
产出:分析报告,列出当前所有问题的分类情况,比例情况,严重性情况,每类呈现出什么特点,给出问题解决的优先级排序。

做完这个事情,整体情况你应该最了解,老板再问你,你就能从全局介绍情况,然后再分类给出优先级。一般老板都关注最关键,最重要,影响最大等关键问题。
1.2 给出XX产品spam的定义
数据分析报告中列出所有问题,而非仅仅是spam问题,因为几乎没有人能在不看大量数据的情况下,就能给出这个产品spam准确的定义,如果有给出的,基本也是拍各种器官拍出来的。
给出XX产品spam的定义很重要,重要的意义有:
1.2.1 明确自己的工作范围
做反spam工作一般开始压力大,万事开头难,千万不要一上来眉毛胡子一把抓,贪多,定位太高,当前具体问题解决不好,赢得不了信任,以后工作很难开展。
跟反spam工作,相关的有很多,黄反监控、账号安全、防攻击防抓站,这每一个都是难度大不好做的工作,反spam没有做好前,不要牵扯精力。
1.2.2 明确自己的工作目标
有了工作范围和工作任务定义,自己的工作目标就容易定出来了,也就是你的KPI,这个很重要,spam问题只要不是瞎子都看得到,不管懂不懂都可以上来说一通自己的策略,如果没有KPI,你就无法证明自己的工作是否有效,无法证明虽然现在问题比较多,但整体情况是在前进,变好的。
1.2.3 指导今后判定问题的标准
今后的工作中,会遇到很多灰色地带和问题,这个定义就是你划分是否属于你工作范围的明灯,也是你在数据分析中,判断具体问题是否是spam的标准。
1.3 发现问题
1.3.1 以spam问题为导向
没啥好说的,初期就是哪里有问题,哪里就有你的分析,研究。
1.3.2 全面掌握spam情况,找出主要问题
面对一个产品的spam问题,首先应从基础数据入手,全面的掌握spam问题的类型、比例情况,最有效的办法是:大量的基础数据标注。这个办法好处非常多,除了能掌握主要问题和全面的情况外,还能对spam的贴子有亲生的体会,了解spamer在想什么,惯用的伎手段有哪些,找出很多典型的例子。
1.3.3 保持发现问题的敏感性,把握spam流行趋势
大型的数据调研有一定的周期性,获得的结论一般关注的是主要问题,由于spam问题有着很强的时效性,反spam系统一旦出现漏洞,某一类之前可能比例较小的spam问题也很容易泛滥起来,因此保持敏感性,把握流行趋势很重要。方法是:
① 关注spam收益高的spam案例;
这个因产品而已,但是每个产品总能找到。
② 注意用户反馈;
任何监控和机制,总免不了有疏漏,我们也要非常注意用户关于spam问题的投诉、反馈,用户深恶痛绝的spam问题,往往也是危害大,容易流行起来的问题。
1.4 分析问题
一个产品中出现的spam行为,也可以看成是一种用户需求,当然这些用户需求从产品官方角度看是不正常的,都是以伤害绝大多数用户体验为代价,满足小部分人赚钱的需求。
反spam中,分析问题最主要的目的,就是把这些一小撮害群之马的行为从绝大多数正常行为中,抽象化、规律化、用机器能执行的语言分离出来,最终变成反spam策略解决掉。主要方法是:
 找碴,找不容易变的碴
反spam就是找出spam行为与正常用户行为之间的不同规律,把这些不同区分出来,区分的办法价值的高低,主要是两点来衡量:spamer的规律是否易变和我们区分的成本是否很低。机器最容易区别的,spamer变化成本高的不同点,就是我们要的点。
常见的4个方向
① 内容;spam行为都是以获利为目的的,在产品里spam,最终spamer都是要把用户、流量导入到目标网站,一般都会在内容中留下spam特征即利益的出口。
② 行为;凡是spam能获利的地方,spamer都希望更快更多的获利,这就注定了spam行为一定会走发的多、发的快的路线,一定会跟正常用户有区别。
③ 社区属性数据,包括:发贴作者注册时间、作者等级(新用户、平民、会员、认证人员),spam贴子发布的连续性,spam用户发贴在贴子页面停留时间等等
④ 用户之间的交互数据,这个不一一列举。
总之,一种类型的数据,就像素描中的笔触,数据越多,意味着你描述犯罪嫌疑人的线条越多,就越能清晰的把spam辨别出来,如果数据很少,那就很难解决复杂问题。另外,数据多了,也应该注意使用最简单有效的数据,RD会感谢你的。
1.5 解决问题
1.5.1 优先解决主要问题
一段时期只能解决一个问题,优先解决影响面最广危害最大的问题,这样获得的收益最大,同时对其他次要问题的解决也非常有帮助,甚至次要问题在解决主要问题的过程中,也会迎刃而解。
1.5.2 小数据量验证策略效果
当spam问题发现和分析完毕后,一般一个解决策略基本成型,这时,一定要先用小规模的数据验证一下策略的效果后,再进行策略的开发和上线。一个反spam策略无论多么的简单或巧妙,都要用数据去验证效果,验证的方法是抽小量的数据去检验,按照这个策略看是否能获得好的准确率和召回率。
1.5.3 坚持低成本、低误伤、高收益,数据说话的原则
很多反spam问题都不止一个解决办法,哪个低成本、低误伤、高收益我们就走哪条路,无论谁提出的想法或策略,用数据检验没有问题后,才进行下一步工作。
不要一上来就想搞个智能分析打分系统,什么贝叶斯,什么离散系统,先一个问题一个问题的解决,一个策略一个策略的上,等你有基础有积淀,如果还需要做这样的系统,那就再做吧。
智能系统很难做,要很高阶的RD和PM搞基一样的配合,才能孕育的出来的生命。Spam变化很快,做智能系统解决很耗时。
1.5.4 解决问题时,以PM还是RD为主导?
一般RD珍贵,事情又多,PM RD 7 3开吧
具体工作怎么做,讲完了,其实,在这个过程中有非常多的难点,定义如何制定,数据怎么分析,excel怎么用等等,欢迎讨论,有空我再续。
2. 如何在反spam业务上进阶
当各类问题和策略的制定,做到两位数的时候,比较少的会碰到无法解决的具体问题时,就可以开始考虑工作的进阶和深入。
2.1 综合问题把握方向
反spam工作是持久战,spam问题也会一直有不断有,头痛医头脚痛医脚只能解决一时局部的问题,要全面彻底做好反spam工作,把spam问题控制在一个相对低的水平,就必须每隔一段时间分析回顾这段时间所作的工作,总结经验把握下一步方向。
一般方法:
2.1.1 首先在解决具体问题中,不断明确解决反spam问题有哪些办法和角度,把这些角度归纳出几个方向。
2.1.2 回顾这一段时间里,我们都是从哪个方向出发的,这个方向我们做的如何?是否已经做的比较彻底了?是否到了瓶颈的地方?是否存在这个方向解决不了的问题。如果有,是否需要换个角度和思路,是数据少了还是方法不对等等。
2.1.3 分析当前面临的主要问题和spam流行趋势
2.1.4 综合过去的经验和当前遇到的问题,系统的完善上一个方向,同时在适当的时候提出和推进下一个方向的开展。
2.2 反 Spam 人才业务上的培养
PM的人才培养,每个产品经理都有自己的特点,我只说一下反 Spam 业务中,如果培养的话,特别需要注意的问题。
(注释:本文的pm不是product manager,而是product marketing的缩写,意思是基于市场需求的产品,(而非创造需求)翻出来说,是提醒新入的pm,别上来就搞什么管理,先把精力投入到产品研究上,product master比别的都有价值。via UBee
2.2.1 解决问题的办法真心不止一条,教给新同学方法,不要总觉得自己的想法最靠谱,都要按照你的意思来。
2.2.2 放权,在背后做支持,发挥新同学的主观能动性吧,做的好是他的功劳,做的不好是他的责任,让新同学尽快的负起责任来,有利于新同学更快的独当一面。
2.2.3 没有做数据分析,就不要乱发表具体策略的建议。经验是个好东西,但会犯错,作为资深人员,仍要注意,没有亲自看数据,不要随便定策略,说出来很容易不靠谱。
2.2.4 把试错的机会留给新人。每个资深产品人员想想自己是怎么成长的,犯了多少错,只要不是方向性的错误,尽量把试错的机会留给别人,在新同学每次犯错后引导他们去思考避免,从错误中学到成长。via 百度产品市场部
3. Anti-spam 产品经理需要具备哪些能力
正如之前所述,解决反 Spam 问题的办法有很多种,所以,成功的反 Spam 产品经理各有千秋,从介绍这个行业或圈子的角度,我列一列众多能力中的几种,大家参考,方便大家了解或招聘时参考。不同的环境导致不同的成长路径,不一定非要照此修炼。
3.1 反 Spam 的数据分析能力
这是实际动手的能力,方法论都可以学可以听,数据分析能力我觉得是一个无法传授,只能自己实践的能力,但在实践过程中,也有一些总结提高的方法。
3.1.1 培养数据亲切感
在热爱这个产品的前提下,数据抽出来时,别人看到的是数据,你看到的是数据背后的用户,用户的需求,他们的种种行为总是给你带来惊喜,他们需求得到满足后,总是能给你带来喜悦。
Spam 各种行为背后都是有着各种各样的联系,产品对他们来说是黑匣子,大量数据放在一起的时候,稍微的排一下顺序,规律就会显现出来。
3.1.2 在数据分析时,不要想当然的给用户打上标签,也就是不要过快的判定非黑即白完事儿,而是不停问自己,他为什么要这样做,是一个还是很多个这样,很多个这样一定有原因,这样原因可以先假设,但一定要用数据验证假设,验证的次数越多下次做建设的时候越容易正确。道理很简单:熟能生巧,简单的东西做到极致,你就像在开外挂一样,别人看不出的规律你总能看出来。
(写到这里说说题外话:写到这的时候,我想起的搜索引擎9238,搜索研究院―,一个超级到不能再超级的超级用户、每天至少搜索上千个词、半夜还在用产品、深夜实在累的不行了摊开睡袋睡下,大家早上上班的时候他去洗手间洗脸刷牙。成功的路上没有捷径,听到、看到或者别人教你关于某个问题如何做跟自己完全掌握,之间还有数以百计个小时。)
3.2 关键问题的把握
做产品做久了,一起讨论问题的时候,你会发现总有那么几个人,他们每次指出的问题都是整个问题的关键点,策略型 PM 这点非常重要。
3.3 全局的产品意识
3.3.1 平台型产品不用在产品设计之初特别在意反 Spam 问题,有这个意识觉悟,不要故意做漏洞,犯低级错误即可。
非小型UGC产品,一般都是先有了这个产品,这个产品发展到一定阶段后,才出现 Spam 问题,所以在产品一开始设计之初,很难有人能考虑到反 Spam,即便有人考虑到这个问题,在产品都不知道以后能否火的前提下,反spam的需求也会因为优先级、资源等问题搁置。再则,平台型产品初期就是要以低门槛来抢用户,成功的运气因素也很重要,在早期做相关的功能或限制没有必要。
另外,反spam是问题导向,问题没有发生,你怎么预设问题然后去控制。
产品人员在分析用户需求,设计产品之初,要心无旁骛的只关注如何更好的满足用户需求,一定要抱有N个假设,这样才能把产品做好。这个 N 个假设里,其中两条是:RD 是万能的,只有成本和收益的权衡;Spam 问题不存在无法解决的问题,只有重视程度和阶段的不同。
3.3.2 能深入细节,更能跳出细节看大局部,看整体。
这句话,看起来比较虚。举个项目例子(我不可以细说),比如你解决某类 Spam 问题,时刻想着做这事儿的目的是什么,有时候解决到80%了,是否可以换个方向审视一下,做一做,可能效果更好。
我一直打一个比方——反 Spam 需要几十个策略,交织在一起想一张网,Spam 来了都要过这张网,当你的网策略少比较稀疏的时候,漏洞就大,Spamer 一试就知道你的大概策略,大概阈值,很容易就钻过去,但是当策略较多,网比较密的时候,钻过去的成本就大大提高,这就要求产品经理能细节能整体。
3.3.3 要共赢,维持生态平衡,不要伤及产品和自身。
Spam与营销有时候只有一线之差
反Spam的目标就是把Spam控制在可以接受的范围内,保持生态平衡,利益链条平衡。做的太狠,也会自损忍受阉割之痛,另外,也会有意想不到的麻烦,你懂的。
4. 我个人的一些经验
4.1 以spam问题为导向
4.2 一段时间只解决一个问题
4.3 优先解决范围最广危害最大的 Spam问题
4.4 策略提出后一定要小数据量验证效果
4.5 发挥每个人的积极性、主观能动性
4.6 坚持低成本、低误伤、高收益,数据说话的原则
4.7 Spam问题具有时效性,反spam更要快速有效
4.8 先下猛药再解决误伤
4.9 不要指望一个策略或一组策略解决所有问题
4.10 勿以善小而不为
当成本也很小的时候,一些收益看起来小的策略,在多个策略综合起效的时候,也能带来很大的收益。例如:在策略很多的前提下(这个前提很重要)解决某些问题的时候,关键词匹配也能很有效。
4.11 人工靠不住,尽量多用机器
4.12 对数据要有亲切感,乐意探究数据背后的故事
4.13 机器不够用,人工过来补。注意是应对图片、视频 Spam,机器识别难度很大的问题。
4.14 注意遗漏,连连看、挖掘召回。
4.15 解决问题的路不止一条。
4.16 PM抽数据困难不畏惧。
========================================================
2016 年 8 月 2 日更新
5. 最近一些时间,在反作弊业务上,自我感觉成长不多,有什么新的感悟,我会逐步更新在下面
5.1 如何解决误伤问题
不同大小体量的平台解决思路不一样
流量、用户群比较大的平台,一般的做法是,周期性的评估误伤,误伤比较高的策略下线掉,再去优化策略,优化到一定程度后再上线;
优化策略一般都会面临挖掘新的数据项的问题,在当前仅有的数据项基础上去优化策略难度比较大,需要很认真细致的看数据,思考策略;而挖掘新的数据项会更容易更有效。新数据项的挖掘,产品最好找到多一些的数据项,预防着有些很好的数据项工程师挖的难度比较大,就需要换。
策略评估误伤,下线,优化,再上线,再评估……,这样的循环做多了,需要思考如何把策略制定变得产品或运营人员可配置化,策略上下线自动化的工作。
策略可配置化,主要是要抽象化策略共同的项,由技术做成模块,新的策略就是由这些通用的模块搭配一些条件生成出来。产品或运营可以去组合出新策略,自由调整关键阈值。
体量小一些的平台,用上述的方法,可能效果不好且成本高,有点像用牛刀杀鸡,而且小体量的平台往往更注重误伤(原因:小平台正常用户本来就少,误伤几个就是大事儿;小平台里当个正常用户影响力更大,十几个核心用户出来反馈误伤,感觉就是大新闻),那怎么办呢?
解决方案是:把处理手段做的有层次些。以前反作弊抓住了,都砍头,砍错了,当然压力大;现在反作弊抓住了都把小拇指的指甲剪了,剪错了,压力不大。但是,剪指甲的手段也要达到反作弊的效果。追求什么效果?第一追求:把人和机器区分开,把机器人干掉;做不到的话,退而求其次,打断 spam 的连续性,提高 spam 的成本吧。
这种手段怎么做?
验证码就别用了,除非是 Google 那种行为验证码,但一般公司做不了也也舍不得花钱做,开源接口被墙了。
三个强
结合性强,要跟自身产品特性结合。Facebook 验证你是不是账户拥有者的时候,会让你填你上传上的照片中,人脸都是谁的脸。
趣味性强,验证有段要有趣,不然正常用户被误伤的时候填起来就会很颓废。我在微博做过把你最近关注的人抽 4 个出来,把名字打乱,让你让头像和名字连线连正确。
安全性强,能真正的把人和机器分开。
5.2 如何挖掘数据项
挖掘数据项是反作弊至关重要的一环,数据项多,解决 Spam 的思路就广。
挖掘数据最关键是两点:好的分类方法和注意细节的能力
好的分类方法:我的经验是,基础数据、社区属性数据、用户之间的交互数据;两个维度:显性数据和隐性数据。
细节数据的分析归纳能力,我的两个经验:多思考如果我是正常用户使用产品一般流程是什么;多思考如果我是作弊的我会怎么作弊,以及多研究各种发帖机、注册机。
宋一松 Facebook,Uber
收录于 编辑推荐 •159 人赞同
我觉得如何应对spam可以很明显的展示出一个公司的实力。原因有两个:

  • 如何通过技术手段来做主动的自动化运营,而不是通过人工手段去被动地应对每一个突发事件,很考验一个公司的技术能力。
  • 除非是应对「重大突发Spam事件」,否则解决Spam对公司短期的KPI没有正面作用(有时可能还是负面的)。因此为什么要解决Spam,怎么Spam,解决到什么程度,都可以体现公司的产品价值观。

接下来就说说Facebook这个超大型UCG平台是怎么解决这两个问题的。
1. 技术化运营
Facebook有一套专门Anti-spam的基于机器学习的系统,叫Sigma。

  • 对于每一个用户在Facebook网站上的每一个动作,比如发帖/点赞/评论/私信/好友申请,Sigma都会实时预测其行为的「可疑」程度。
  • 这个「可疑」程度具体又分为多个子维度,包括假帐号,被盗号,刷榜刷赞,发钓鱼帖等。
  • 针对每个维度,Sigma都会基于机器学习生成一个可疑值,数值高的就会自动触发对应的规则系统:删号,删帖,发邮件或短信来要求用户确认帐号等。

相比起用于精准广告,智能排序,个性化推荐一类的机器学习系统,Sigma最大的不同就是响应速度要快,在各个层面都要快:

  • 模型的训练必须是online的,用实时的数据。否则新出现的Spam没有第一时间体现在数据里,再好的系统也没用。
  • 「学习率」必须要快。相对的,「准确率」就没有那么重要。一个2%失误率的算法在当天就控制住了spam,让它只影响了1000个用户,远好于一个失误率只有1%,但到了第二天才学会正确识别spam,以至于让它影响了10万个用户的算法。
  • 模型和规则的部署要快。新的模型出来了,或者万不得已手动加一个新规则,你如何把新的模型和规则部署到服务器上去?在这十万火急争分夺秒的时刻,你总不能让机器们轮流着重启一遍吧。

在上述的这些独特的技术问题之外,还有更重要的一点值得再次强调一下:Sigma不是一个独立的模块。它在每个用户的每个行为都会被触发,因此它与整个Facebook技术系统的结合要极为紧密,涉及各个环节。这对规模不大的产品来说不是什么难事,但如果接触过类似FB这种一个网站包含各种复杂功能的系统,应该能理解工程上的挑战吧。对应的,如果能把这件事做好,体现的也就不仅仅是anti-spam什么的,而是公司整体的技术工程能力了。
2. 产品的价值观
为什么要anti-spam?那些引诱用户去钓鱼网站的自然要解决,但那些买僵尸粉来给自己刷赞的呢?把他们做掉了,短期内产品的数据反而会降,那要不要做呢?如果做的话,目的又是什么呢?
是为了维护社区的质量,无论这会怎样影响短期数据。
想明白这些,对「spam」的定义就会宽泛很多。对应的,也就不能仅依靠anti-spam一个团队来做工作,而是要求公司内的每一个产品团队都要保持对质量的关注
举个例子,我在Facebook时做的是Newsfeed排序,离开公司前的最后一个项目,就是和广义上的spam有关:抓出标题党
很多公众号/营销号/蓝V号爱做标题党,这事在Facebook上也不例外。然而,在FB这侧,通过对比一个分享的点击率和平均阅读时长,很容易找出那些典型的标题党。在新鲜事排序上对这些标题党做降权处理,减少他们在新鲜事上的曝光量,从而控制了低质量内容在社区内的传播。
同理,我们还会做掉骗赞的和骗转发的。
可以看出来,做这些工作对社区绝对是好的,但对宏观数据完全没帮助,反而可能不利于公司与公众号运营者们的关系。某种程度上,anti-spam天然地与KPI文化相违背。因此,anti-spam最终做得好不好,取决于公司自上向下的产品价值观:
到底是冲数据,还是做正确的事?
————
附:
[1]: 关于Sigma的paper: http://research.microsoft.com/en-us/projects/ldg/a10-stein.pdf
aviat 淫欲、暴食、贪婪、怠惰、暴怒、嫉妒、傲慢
30 人赞同
搜索的spam、微博的spam、论坛的spam、软件客户端的spam不太一样。
本经验部分来自于客户端spam的个人经验。
——————
补充几点具体的:
1.ip聚集,地理位置异常,细分视图毛刺
2.恶意id属性信息分析
3.恶意行为轨迹分析
4.流水log小样本抽样,点定人肉观察评估
5.价值链分析
6.智能预警(合理划分低于标准、正常、异常三个维度即可,不说专业词汇了)
7.不要什么都依赖验证码,另没有不会被破解的验证码
##########
提高对方成本,降低自己成本
抓大放小
事前控制
实时限制
事后打击
三十六计若干都可用
《失控》第二章吧,机器人那段。小而独立,但有用,可复用,可被组合。求全,求系统,你就死了。人家是钻空。
裴立(Pz) 入门级PM http://www.lockon.cc
39 人赞同
以论坛中的反垃圾信息为例, 从具体策略上说说自己的看法。
1.对每一个帐号都设定打分项,主要从帐号发布的内容、帐号的行为、与帐号的关联因素三方面考虑。
内容因素:
首先,垃圾帐号发布的内容多半会提供一个外站的链接或者手机、QQ号。因此一个帐号连续多次发布的信息中如果有重复的链接/数字出现,他有极高的可能性是一个垃圾帐号。
其次,每个论坛都会有自己的敏感词库,如果不是那种最ugly的敏感词库,至少应该会有三层级别:
a.直接删除内容并禁言帐号;
b.需要对内容做先审后发的处理同时监控帐号其他发布的内容;
c.内容可以先发后审,帐号不作处理。
对于前两种情况,垃圾信息能造成的危害被降到了最低。第三种情况,就需要结合其他因素一起来判断。
行为因素:
这里举一个例子来说,垃圾帐号因为是趋利,所以在行为上一定会异于普通的正常用户。比如在论坛上它会一直不停地发帖,而正常用户都是看帖多发帖少。这就给我们提供一个参考。通过post数量和浏览的url数量比值我们就能找到垃圾帐号和正常帐号的差异。
其他的关联因素:
看到之前的回答中有提到不少,这里补充一个:帐号所使用的主机id。垃圾帐号通常是批量注册的,因此一个垃圾账号背后来自同一个ip、同一个主机的其他帐号往往也都是垃圾帐号。但是这里提出一点:不要轻易封掉ip或主机,一方面是会有误伤,另一方面这种简单的封杀做法会让你的反垃圾体系变成马其诺防线,一旦被突破,只会抬高你的反垃圾成本。
2.基于上述三方面的考虑后,我们已经拥有评估垃圾帐号可能性的几个因素了,基于三个因素对帐号做评估。可以使用一些比较智能的算法,比如贝叶斯公式,但这需要你能准确地统计出垃圾帐号中各个因素的占比系数,这个模型一旦建立起来,整个反垃圾系统需要通过不断地机器学习来对系数做调整,才可能应对垃圾帐号即时的变化。
当然,你可以有比较简单的做法,只要某个帐号具备了其中的若干因素,就可以怀疑它是垃圾帐号了。接下来就看是否需要借助人为的监控行为做进一步识别了。
3.验证码和反垃圾策略的关系
必须明确的一点是:验证码本身只能用来防住机器人,防不住人,更何况破解技术层出不穷,实际上抵挡机器人的效果也不完全能让人满意。即使你对自己的验证码有把握,那么你也许能挡得住一部分机器人,但并不能把所有垃圾帐号都防住。
所以验证码实际上只能算抵挡垃圾信息的第一道防线,在验证码之后,一定要有合理的反垃圾策略。
4.反垃圾工作的确是一项长期的工作
理论上来说,当垃圾信息的发布成本高于所能得到的收获时,垃圾信息会减少,这些发布垃圾信息的人也会选择离开,转而寻找其他的社区。但事实上,垃圾信息行为与反垃圾行为永远都是一场你来我往的战斗,随时注意网站的数据变化,及时找到典型的垃圾模型。才能巩固已有的战果。
iammutex 彩石手机CTO – 做最好的中老年智能手机
19 人赞同
贴一个两年多以前的文章吧,相信并不完全过时。
——————————————————-
《谈谈反垃圾》
由于常年从事用户产品的开发工作,工作中难免遇到过各种各样反垃圾的事,一回生二回熟,在摸爬滚打的对抗中,也摸出了一些门道,此文算是对个人经验的总结,非专业视角的分享。
这里说的垃圾主要针对诸如垃圾评论,机器注册,机器刷接口等等。
反垃圾很重要的两步是:垃圾识别,垃圾处理(包括预防)。
【垃圾识别】
对于判别垃圾,通常有下面一些方法。
1.基于内容的识别在基于内容的判别上,最直接的是关键词过滤,比如包含“开发票”、“激情视频”这类词的极有可能是垃圾内容,我们通过字符串匹配来判断是否有这类关键词。这里有一个难题,如果是检索一段内容是否包含某一个词还算简单,有很多算法可以实现,比如经典的KMP算法,很多语言内置的字符串查找方法效率也很高。但是,要判断一段内容是否包含一堆关键词中的某一个或某几个,那就有一些难度了,总不能循环一遍所有关键词挨个做匹配吧,所以此法必不可取。
这里推荐两个方法,一个是基于trie树的关键词树,具体有没有开源实现的不清楚,我们使用中是自己基于Memcached改了一个,保留Memcached的简单协议,修改内部逻辑为trie树的查找,简单来说就是将关键词做字节切分,建立一棵trie树,判断一段话中是否包含这些关键词,只需要从根节点向下检索即可。
另外一个方法,是利用贝叶斯算法来进行垃圾概率计算。贝叶斯算法这里就不多展开说了,其原理简单来说就是,收集一组正常内容和一组垃圾内容,用此内容对系统进行训练,让系统能够知道每个词在正常内容中和是在垃圾内容中的概率。做完训练后,再有一段新内容过来,可以直接对其中的词进行综合加权计算,得出整段内容是正常或垃圾的概率。
2.基于特殊内容的识别上面是纯粹基于随机内容的识别,而实际上我们可能还有一些省力的方法,比如一般的垃圾内容经常会有下面一些特征:带链接(因为要把用户引导到自己的垃圾网站),带图片(为了更醒目),带数字串(比如QQ号,电话号等等),通过这些特征做字符串匹配也是一个好方法,而且就个人经验来看,还比较奏效。其中需要注意的一点就是,上面的链接、数字串这些,通常攻击者都会搞一些变体,不会直接写链接和数字让你判断。比如换成中文数字和字母,你知道,UTF8是很博大精深的。比如:1҉2҉3҉4҉5҉6҉7҉8҉9҉0҉ 这种。所以判断规则上需要多做一些兼容,比如把这种东西先全转成数字来判断。
3.基于请求方式的识别另外,垃圾毕竟是通过我们暴露给用户的各种接口进来的,而攻击者请求我们接口的方法难免与真实用户有差距。比如说,正常用户会先进入注册页面,再填表单,再提交注册按钮。但是恶意注册程序,很可能是不会先访问你的注册页面的,而是直接请求注册接口(利用这一点我们就可以作文章,比如对用户访问路径进行记录,如果未访问页面就直接请求接口的,判为恶意请求)。另外就是攻击者的http头信息,比如最常见的,UA字段是否是cUrl或者其它非正常浏览器。或者像很多前端团队都有在请求url上添加随机数的习惯,这样本来是为了避免后端缓存,但有些低水平的垃圾请求会原样的每次都用同一个随机数,这就很容易识别他们了。总之,从http请求的层面可识别的东西很多,只要攻击者伪装有一点纰漏,咱们就可以抓到他的尾巴。
4.基于请求主体的识别如果我们遇到UGC内容的垃圾攻击,那么发起请求的肯定得是一个正常用户(如果是匿名社区请忽略此条)。这时候,内容发送主体的信用级别,就可以转移为对信息质量的判别上来。就像我们都懂的,某些大的平台也会对不同用户执行不同的审核策略(比如都知道的先审后放,还是先放后审),这也需要我们对内容发布主体有充分的信用分级。比如,一个注册24小时内的用户相对一个注册三年发帖无数的用户来说,信用等级就低得多。
5.基于内容载体的识别垃圾内容之所以能形成黑色产业链,通常绝不会是恶作剧玩玩而已,所以跟互联网最传统的广告模式一样,垃圾也希望能够多曝光,多赚点击。那怎么做呢,通常就是选择在用户扎堆的地方去发。比如时下热门的电视剧,热点的新闻事件下面就是垃圾流量的公共厕所了。另外,在一些政治军事内容版块发反动言论,在一些娱乐美女内容版块发成人网站,这些也都是常用的路数。总的来说就是,同样一条内容,在热门版块发布,更有可能会是垃圾内容,需要我们更多的关注。
【垃圾处理】
好吧,上面说了一大堆的方法去给内容和用户评级,以便我们能够对一个用户或者一段发布的内容进行预估,那么,在我们了解了一个用户或者一段内容是否可能是垃圾后,我们脑子里首先蹦出来的可能就是:封杀!但实际处理方法可能不仅封杀一种,下面我们就来探讨一下对垃圾攻击的几种处理方法。
1.制定封杀方法如果我们已经确切掌握了垃圾流量的规律,比如某一个IP或一组IP,比如同一组参数,比如内容总是包含某网址的变体,那么我们就可以直接大开杀戒,用这些特征直接进行封杀操作。
2.制定审核级别顺着上面的思路,我们可以对不同的用户和内容施加不同的审核策略,比如是直接放行、先审后放、先放后审还是直接毙掉。我们还可以对用户施加不同的限制策略,比如新注册用户每天只能发3条内容(在审核通过一条后又可以再发)。
3.工作量证明工作量证明是一个在反垃圾邮件中的方法,最近火得不得了的比特币,工作量证明也是其核心理论支柱之一。通过引入工作量证明方法,我们甚至可以不用对垃圾流量进行判别。只要加一道隐形的门槛,就足以让很多攻击者却步。
举个例子,如果攻击者原来只需要请求一次接口就能够发布一条信息,现在我们需要他在接口请求之前先填一个验证码,他就没那么容易自动狂发内容了。上面这个逻辑大家都能理解,也确实能奏效,但是很抱歉,这样做很伤用户体验,产品经理说不行。
那我们换一种做法,我们让用户在请求前先做大约10w次的md5运算,普通用户的机器偶尔进行一
次这样的计算不算什么,但是对攻击者来说,它需要单机发布大量内容,如果我们要求每条内容都需要做10w次md5的话,对的硬件资源是很大的挑战,也是让他放弃对你网站进行攻击的一个方法。
当然,如果我们直接用上面的10w次md5的方法,我们在服务端也需要做同样多的工作才能对传入的接口进行验证,对我们服务器本身也是很大的挑战。所以上面只是一个为了让我们理解的例子,通常的做法是,服务端给定一个随机字符串 s1,客户端需要找到一个数 d,这个数要满足下面条件:这个数破加在这个随机串后同组成一个新串 s2,这个新串进行md5后,前5位都要是0。大家可以想一下,要达到这样的标准,客户端需要不断循环来寻找这个合适的d,而服务端验证却是只需要进行一次md5就可以了。这就是所谓的工作量证明。
4.请求签名请求签名也是一个省时省力的好方法,前后端约定一种hash算法(最好是自创的),前端对请求内容进行签名,后端验证签名。通过对前端代码进行混淆,让攻击者很难实现你的hash算法。增加他的攻击成本。
5.查出源头发垃圾内容的攻击者通常都不会用自己机器或服务器IP(要不你就赚到了,直接封IP就行了),而是用手里控制的肉鸡或者扫描来的http代理来做,其实识别肉鸡和代理也比较简单,最直接的方法就是看看开没开着80、8080、3128等端口。这是一般代理的常用接口,另外一般情况下被拿下的肉鸡也都是web接口防范不严造成的。如果是普通http代理,很可能会很有良心的通过x-forward-for,或者x-real-ip等http头信息把源ip传给你,而对于肉鸡找到肉鸡,如果你的黑客水平够,你可以直接也黑上去,看看是哪个IP在控制它,从而查到真实IP。查到攻击者的真实IP后如何处理就看你的了,是联系攻击方和平解决,直接报案还是把攻击者给黑了。那就看个人想法和水平了。
【策略与战略】
上面说了一堆战术层面的东西,下面聊一点战略上的原则。
1.反垃圾是一场成本的较量反垃圾,其实不是一项技术竞赛,更不像是个人恩怨,更多的是成本较量。 如果你的网站流量大,但防护措施做得不够,那垃圾流量过来是必然的。我们所有的反垃圾策略只有一个目的,就是增加攻击者的成本,当成本上升到某一阈值时,攻击者会发现在你的网站玩太费劲,投入产出比太低,于是会去找同类型的其它网站。所以就像狮子和羊群一样,只要不是跑得最慢的那一只,就能逃过狮子的爪牙。
2.多数攻击者痛点在IP无论是用代理,还是肉鸡,攻击者的IP资源总是比较有限的,所以收集到足够多的IP进行封杀,通常能够解决大问题。
3.实而示之虚上面说反垃圾是一场成本较量,但在我们实际操作中,却要尽量避免真正的较上劲。比如当你发现了恶意请求的规律,如果你选择直接对此规则的请求返回404,那么攻击者也会马上知道它的攻击特征被你发现了,从而迅速进行升级对抗。但是如果你只是让他的操作无实际效果,但还照样返回“注册成功”、“发布成功”,那么攻击者可能会麻痹大意很长时间才会发现。正如《孙子兵法》中说的:“实而示之虚”。实际上在垃圾与反垃圾的较量中,最忌讳的就是无止境的军备竞赛。
4.发现特征之钓鱼策略有的攻击者很高明,能够将自己的请求伪装得得正常用户一模一样,所有的http头信息,请求参数,都完全仿真。对于这样的攻击者,我们有什么办法抓到他的尾巴呢。这里给大家介绍一种钓鱼策略。首先你修改一下你的网站的前后端逻辑,比如前端增加某一个参数,后端判断没有这个参数请求就会失败,这时候攻击者马上就会发现自己请求失败了,通过对正常请求的抓包,他很快发现你增加了一个参数,那他会跟着进行修改。这时我们让他爽几天。然后偷偷地把这个无关紧要的参数撤掉。这时候,所有正常用户请求中都不会有这个参数了,但是,攻击者不会时时关注我们的请求参数,所以还会在一段时间内,继续加上这个参数请求。这时钓鱼成功,正是我们的好机会,在这段时间内,我们可以尽量收集垃圾的IP,发布账号等信息。等收集到一定程度一起封掉(当然,这里的封掉也不要暴力封掉,而是让看起来没有被封掉)。
总的来说,反垃圾工作其实不是一个技术活,要求更多的是细致、谨慎与耐心,希望上面东西对你有用。