搞了anti-spam之后,发现原来杀毒软件的原理也是类似的,浏览器的AdBlock插件原理也是类似的.
-
目的
垃圾是不可能根绝的,就跟犯罪不可能根绝一样.所以anti-spam的目的,就是提高攻击成本,降低防御成本.攻击者的目的无非就是牟利,当他们成本太高的时候,就会降低攻击力度. -
攻击者的智慧
-
人肉打码:绕过验证码
-
淘宝"注册账号交易"
-
代收短信业务/代收邮件业务:绕过手机动态口令验证和邮件激活
-
新帖秒回
-
逆向app获取密钥
-
机器刷接口
-
伪造ip
通过修改http header的x-forward-for来伪造ip
-
检测手段
-
内容
-
敏感词过滤(用AC自动机进行多模匹配)
-
相似度过滤
-
文本相似度(shingle算法)
-
图片相似度(ahash/dhash/phash)
-
垃圾帖子的内容中一般有联系方式如url/手机号/qq号/微信号等.
-
行为
-
没查看就回复帖子
-
发帖太频繁
-
频繁变ip
-
频繁清空cookie
-
注册账号使用类似的email/用户名,比如akjlhiol/akjihlol等.
-
属性
-
防御手段
-
验证码
-
注册登录要验证码
-
异地要验证码
-
发帖频率过快要验证码
-
加cd时间
-
等级制度
-
黑名单
-
工作量证明
比特币挖矿这么耗电,其中一个原因就是工作量证明.原理就是利用工作者(客户端)和验证者(服务端)工作量的不一致.比如我们让用户在某些敏感请求前做10w次的md5运算,对于正常用户来说这点不算什么,对攻击者批量发请求来说,就是一个很大的负担了.具体做法可以是,验证者给定一个随机字符串s,工作者必须找出一个数n,使得随机字符串拼上这个数n后的md5结果前面几位都是0.即md5(s+n)的结果符合验证者的要求.工作者只能不停的穷举,找出这样一个数n.而验证方只需要拿工作方给过来的n,进行一次md5即可验证.即if
md5(msg+str(n)).hexdigest()[:4] == ‘0000‘. -
签名参数sig
客户端对请求的内容进行签名(生成一个hash值),服务端验证签名.需要对客户端代码进行混淆,而且尽量不采用开源的混淆算法. -
烟雾弹
比如用户发一个垃圾帖,我们如果直接删帖,攻击者马上就知道了,他就会寻找其它策略.但是如果我们放烟雾弹,让他的请求无效,但是还返回"成功",或者删了帖,那个帖子只有发布者自己能看到,其它人看不到,发布者就会以为发的帖子没被删. -
钓鱼
让客户端增加一个无关紧要的参数,攻击者不会马上知道,还傻傻的按照以前的请求参数发送,因为我们知道没有这个参数的客户端不是正常的客户端,于是我们可以从这个时间起收集这些攻击者的账号id,等收集的差不多的时候就扫荡封杀掉.
-
惩罚级别
社区帖子anti-spam综述
原文:http://blog.csdn.net/handsomekang/article/details/41528411