前言: 做产品, 安全问题是一个不能不考虑的问题, 稍有不慎就会发生类似薅羊毛信息被盗等问题很多时候我们都在寻求技术方面的解决方案, 但其实有一些简单的产品策略, 也可以从一定程度上减少安全问题的发生今天会从之前遇到过的社区垃圾帖问题入手, 探讨产品设计层面上对于安全问题的缓解办法
问题
在做社区产品时, 经常会遇到很多的垃圾内容, 较为常见的是一类包含色情信息外链引流信息的内容这种内容很多都是大面积批量发出, 单纯靠人工删除远远跟不上发布的速度, 导致整个社区中充斥着这类违规内容, 不仅影响用户体验, 还会存在法规上的风险
分析
采集这些垃圾帖的内容和发布用户信息后, 发现这些垃圾内容有以下一些特征:
发布的内容大同小异, 基本都附有手机微信外链等内容
内容的发布者绝大部分为刚注册的新用户, 极少数的为正常用户
内容的发布者 IP 地址和 MAC 地址均不一致
可以看出这些特征中有如下一些共性:
发布者的目的是希望把用户向站外引流, 但与社区本身不构成竞争关系
发布者为恶意用户批量注册的账号, 且无法用禁用 IP 或 MAC 地址来屏蔽
解决方案
不难发现, 整个垃圾内容发布的流程中存在两个重要节点: 用户账号批量注册和垃圾内容发布, 因此考虑从这两个节点入手解决
1. 针对账号体系
注册限制:
在新用户注册时, 通过增加验证码 (短信验证码图片验证码等) 增加用户注册成本, 抵御部分恶意注册的现象
收集注册数据, 对比正常用户的行为, 对非正常用户进行账户冻结
登录限制:
在用户登录时, 增加图片验证人机识别混合验证
限制用户的登录频次
高危账户 (多次异地登录等) 进行校验或强制要求修改密码
2. 针对内容发布
发布限制
在用户发布内容时, 增加图片验证人机识别混合验证
针对用户发布的内容, 增加关键字校验, 触及违规或敏感词汇的内容不允许发出
限制新注册用户的日发布内容的数量
这样就可以了吗?
增加了这些限制, 上线之后, 很多的问题暴露了出来:
由于增加了非常复杂的验证机制, 导致用户的注册登录和内容发布受阻, 新增用户活跃用户和内容生产量有明显下降
违规发布者为突破每日发布限制, 开始盗取老用户的账号信息, 进行垃圾帖发布
增加屏蔽的关键词永远是滞后的, 只能等新的垃圾帖内容发出后丰富关键词库, 但这时垃圾帖已经产生
关键词一刀切的屏蔽方式, 很容易将正常内容也过滤掉, 打击用户内容发布的信心可以猜一下下图为什么被屏蔽:
所以先前的策略起到了一定的效果, 但是看起来得不偿失这种情况应该如何应对呢? 细化规则
解决方案 2.0
之前的策略之所以存在问题, 是因为未能做到更细粒度的针对, 宁错一千不漏一个因此要想解决这个问题, 最好的办法就是细化拦截规则
1. 针对验证码:
增加每日免验发布阈值
增加免验权限用户(高级别, 安全风险低的用户可以免验, 这部分用户大多为活跃用户, 账号被盗取可能性较低)
采用更简单的验证方式(比如从图文式验证码改为行为式验证码)
2. 针对关键词过滤:
将关键词划分安全等级, 不同等级进行不同处理, 如低等级关键词用 ** 代替, 中等级关键词仅对发布者可见, 其他用户不可见, 高等级关键词直接禁止发出
建立内容过滤池, 对已屏蔽的内容进行记录, 若出现正常内容被过滤的情况, 则可以手动恢复
增加新关键词后, 支持将历史内容重新过滤一次
一些疑问
疑问: 为什么要在不相关的社区发布色情信息呢? 批量注册新用户是怎么做到的, 哪里来的这么多手机号? 老用户的账号信息是如何被盗取?......
出于 SEO 考虑, 很多色情内容或者网站为了引流, 会在高权重的网站内发布相关内容, 用户在搜索时相关的内容即会优先展示, 所以有专门的工作室承接垃圾内容的推广
首先很多网站注册时不要求用户输入手机号, 因此可以通过注册机, 直接通过 post 请求与服务器交互, 就可以完成批量注册; 如果是需要手机号的注册, 则可以通过灰色产业购入不带有身份信息的黑卡, 成本低, 投入产出可观
若本身站点用户登录时密码传输校验正常 token 未被破解或劫持, 则很大可能用户信息泄露为撞库导致所谓撞库, 简单来说就是非法入侵者通过技术手段 (漏洞注入 webshell,etc.) 或者获取已有社工库, 建立一个较为完整的数据库后, 尝试用这些库中的信息去登录其他系统一般由于前期数据采集较为详实, 撞库所用的字典精度比暴力破解的高, 因此成功率也会高
一些思考
一些需要从技术角度的问题, 从产品层面上也可以做一些优化
解决问题时需要找到问题的关键节点, 学会提取共性和发现差异
数据监控很重要
问题的解决方案需要进行相应调整, 直到找到最优解
尝试去深入业务, 分析业务, 找到利益矛盾点, 对解决问题大有裨益
来源: https://juejin.im/post/5a7327a46fb9a063475f4ee4