内容简介:了解更多牛x开源项目与工具
点击蓝色“ TJ君 ”关注我,
了解更多牛x开源项目与工具
当我们的产品用户越来越多的用户加入,流量越来越大。各种牛逼投资机构开始看上了你的时候,很多灰色地带的黑手也开始盯上了你这块流量蛋糕。这时候,对于用户异常行为的防护就会变得越来越重要。但是,往往现实总是那么残酷,无法拒绝的业务需求与不得不做的安全管控,在一定的成本控制之下,对于人力的投入选择变得异常艰难。对于这样的场景,TJ给大家推荐下面这个开源项目:
- 项目名称:陌陌风控系统静态规则引擎
- Github:https://github.com/momosecurity/aswan
架构介绍
后台介绍
-
名单管理
为名单型策略提供基础的数据管理功能。
名单数据的维度包括:用户ID、IP、设备号、支付账号、手机号。后续也可以根据自己的需求扩充其他的维度。
名单包含三个类型:黑、白、灰名单
名单必须属于某个项目(用于确定名单的范围),可以在名单管理-名单项目管理中添加项目。
-
名单型策略
描述符为**{参数名:单选,假设是“用户ID”} {操作码:在/不在} {XX项目:单选,可选全局} 的 {维度:单选}{方向:黑/白/灰名单}**
示例:用户ID 在 初始项目 的 用户黑名单 中
-
布尔型策略
不传阈值的布尔型,描述符为 {参数名:单选,假设是"账号ID"} {操作码:是/不是} {内置函数:异常用户} 示例:账号ID是异常用户
传阈值的布尔型,描述符为 {参数名:单选,假设是"账号ID"} {操作码:大于/小于/等于/不等于} {内置函数:历史登录次数} {阈值:170} 示例:账号ID历史登录次数大于100
内置函数
是什么?就是自定义的一些逻辑判断函数,只需要满足要求返回布尔值即可。比如注册时间是否在某个范围以内,当前设备是否是常用设备。 -
时段频控型策略
描述符为 同一 {计数维度:单选,假设是“设备”} 在 {时段:时间跨度} 内限制 {阈值:整数N} 次 某动作 示例:同一设备一天内限制操作10次. 可是我怎么知道当前已经有多少次呢?这就需要上报,上报后将计数 详见第9条 数据源管理
-
限用户数型策略
描述符为 同一 {计数维度:单选,假设是“设备”} 在 {时段:时间跨度} 内限制 {阈值:整数N} 个用户
示例:同一设备当天限10个用户 此策略同样需要上报的数据,且由于与用户相关,因此上报数据中必须包含user_id字段(在数据源中需配置) 详见第9条 数据源管理
-
规则管理
管控原子:命中某条策略后的管控动作,比如拦截... 把上面2--5中所述的策略原子按照优先级组合起来,由上向下执行,直到命中某条策略,则返回对应策略的管控原子。此模块更多是重交互,完成策略的配置、组合、权重等等
-
日志管理
所有命中策略的日志均在此展示,也会包含审计相关的日志,
下一期会基于此日志,开放拦截溯源功能
。 -
权限配置
供权限设置使用,精确限定某个用户能看哪些页面的数据。 详见 其它 -- 权限管理。
-
数据源配置
示例策略:同一设备一天内限制登录1000次 那么每次登陆就需要上报一条数据,系统会分类计数,并分类存储。 存储的名字叫啥?就是此处要配置的数据源。对于此策略,只需要配置数据源,命名为login_uid, 字段包含uid, uid类型是string。然后程序就能根据uid为维度计数,并自动计算指定时间窗口内是否超出指定阈值。
重要:由于逻辑必然依赖时间信息,为通用且必需字段,timestamp为默认隐含字段,类型是时间戳(精确到秒,整数)
调用样例
-
调用查询服务
假设存在id为1的规则,则可以通过如下方式查询是否命中策略
curl 127.0.0.1:50000/query/ -X POST -d '{"rule_id": "1", "user_id": "10000"}' -H "Content-Type:application/json"
-
调用上报服务
假设存在名称为test的数据源, 且数据源含有的数据是: {"ip": "string", "user_id": "string", "uid": "string"}
curl 127.0.0.1:50000/report/ -X POST -d '{"source": "test", "user_id": "10000", "ip": "127.0.0.1", "uid": "abcabc112333222", "timestamp": 1559049606}' -H "Content-Type:application/json"
-
关于服务拆分
开源样例中,为了简化安装部署,查询和上报揉进了一个服务。实际场景中,显然读写应该分离。
1.可以直接此方式部署2份,域名不同,一份用于查询(上报接口不被访问),一份用于上报(查询接口不被访问),流量分发在nginx层完成
2.risk_server.py中修改配置URL_2_HANDLERS,选择您需要的服务接口部署
内置函数的扩展
-
不带阈值的内置函数扩展
以
是否异常用户
内置函数为例代码见 aswan/buildin_funcs/sample.py 中的 is_abnormal 方法
-
带阈值的内置函数布尔型策略扩展
以
历史登录次数
内置函数为例代码见 aswan/buildin_funcs/sample.py 中的 user_login_count 方法
注意:阈值计算不包含在内置函数中进行,控制流详见 aswan/buildin_funcs/base.py
其它
增加用户
考虑到企业用户大多数为域账户登录,因此推荐使用LDAP认证模块直接集成。但考虑到大家的场景不一样,因此也可以手动增加用户,样例代码如下:
# coding=utf-8 from django.contrib.auth.models import User username = 'username' password = 'password' email = 'email@momo.com' first_name = '测' last_name = '试' # 普通用户 User.objects.create_user(username=username, password=password, email=email, first_name=first_name, last_name=last_name) # 管理员账户 User.objects.create_superuser(username=username, password=password, email=email, first_name=first_name, last_name=last_name)
添加完成后,让用户登录,然后管理员配置权限即可。
权限管理
目前的权限模型包含如下元素,可在对应的页面进行配置。
具体图示如下:
配置相关
目前Django部分的配置均存放于 www/settings 目录,非Django部分的配置均位于 config 目录下。
为了在不同环境加载不同的配置,我们使用了RISK_ENV这个环境变量,系统在运行时会自动通过这个环境变量的值加载对应的配置文件。
为了方便项目启动,在未设置这个值时,系统默认会加载 develop 环境的配置。而在执行测试时(python manage.py test)时,RISK_ENV的值必须是 test 。
往期推荐
大家好,我是TJ
一个励志推荐10000款开源项目与 工具 的程序猿
欢迎关注我,了解更多牛x东东
以上所述就是小编给大家介绍的《不知道用户异常行为如何管控?这个开源项目了解一下》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 敏捷开发模式下金融机构开源软件引入风险及管控举措
- 蚂蚁金服 SOFADashboard 启动开源共建 | SOFAStack 一站式管控平台
- 工具 | 滴滴开源的一站式 Apache Kafka 集群指标监控与运维管控平台
- 软件需求阶段—质量全面管控
- 5G承载网络切片管控技术研究
- 中通统一权限安全管控系统实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
硅谷增长黑客实战笔记
曲卉 / 机械工业出版社 / 2018-4-10 / 65.00元
增长黑客这个词源于硅谷,简单说,这是一群以数据驱动营销、以迭代验证策略,通过技术手段实现爆发式增长的新型人才。近年来,互联网公司意识到这一角色可以发挥四两拨千斤的作用,因此对该职位的需求也如井喷式增长。 本书作者曾在增长黑客之父肖恩•埃利斯麾下担任增长负责人,用亲身经历为你总结出增长黑客必备的套路、内力和兵法。本书不仅有逻辑清晰的理论体系、干货满满的实践心得,还有Pinterest、SoFi......一起来看看 《硅谷增长黑客实战笔记》 这本书的介绍吧!