首页 > 代码库 > 社区帖子anti-spam综述

社区帖子anti-spam综述

搞了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等.
    • 属性
      • 注册时间
      • 用户等级
      • vip
      • 小编账号
  • 防御手段
    • 验证码
      • 注册登录要验证码
      • 异地要验证码
      • 发帖频率过快要验证码
    • 加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综述