- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
原创文章,转载请标注。 https://www.cnblogs.com/boycelee/p/17324600.html 。
本篇文章会从系统架构设计的角度,分享在对 业务安全相关基础安全产品 进行 系统设计 时遇到的 问题难点 及其 解决方案 .
内容包括三部分:(1)风控业务架构;(2)基础安全产品的职责;(3)基础安全产品相关系统架构的设计要点.
文章会以总-分的形式进行阐述。懂的不多,做的太少。欢迎批评、指正.
我把风控业务架构的分层分为 6 层,分别是 组件层 、业务层、决策层、 能力层 、计算层、可视层.
以下 基建 为 基础安全产品 的简称.
组件层的职责是: 数据收集与行为反制 .
从接口、设备、行为三个维度进行数据收集,接收决策层的指令进行行为反制。为了保证数据的收集数据的可靠性,就衍生出了壳、混淆、反调试等加固策略.
更详细的思考在我的《风控安全产品的探索之路》这篇文章中,感兴趣可跳转阅读,这里就不再赘述。 https://www.cnblogs.com/boycelee/p/15948323.html 。
业务层的职责是: 风控数据透传与风控决策结果处理 .
将风控所需要的数据透传至决策层,业务层获取到决策层数据后,根据决策层结果选择执行风险反制或业务逻辑.
透传数据一般包括:风控数据和业务补充数据.
决策层的职责是: 风控能力应用 .
决策层是整个风控业务的核心,将风控能力高效连接起来,有效、合理地应用能力层、计算层所具备的能力。 这一层的难点在于工程而非安全领域 ,例如:如何设计调用链路(降低计算时长)、如何处理超高并发流量、如何保护下游风控内部系统等.
其中包括:风控参数预处理、风控能力应用(组件/名单/模型等)、风险决策(规则引擎)、反制决策(观测/登录/验证码/行为验证/封禁).
能力层的职责是: 识别基础安全风险 .
该层包括:设备指纹、环境检测、接口防护、验证码、IP风险、手机号风险、链路风险等.
能力层是风控系统的基石,它的能力决定了一个风控系统识别风险能力的下限。会从 资源、接口、设备、链路、行为 等维度进行系统性风险扫描.
能力层的职责是: 补充风险识别能力 .
该层包括:数据引擎、规则引擎、风险名单、识别模型、风险预警.
计算层是对基础安全风险识别能力的补充,它的能力决定了一个风控系统识别风险能力的上限。从频率统计、策略规则、风险名单、模型识别、风险预警等维度对能力层进行能力补充.
可视层的职责是: 提升运维效率 .
该层包括:运维报表、引擎配置、流量监控、事件追踪.
可视层能够在事前能够分析风险潜在风险,事中有效执行并降低配置错误概率,事后观察风控效果。满足运营策略调整与风险管理的需求.
因为目前主要深入了解与实践的是组件层和能力层的建设,所以文章后续会从基建(基础安全产品)的视角进行系统性总结.
拉新激活、账号、反爬(多业务线)、交易(多业务线)、营销(多业务线).
ADR(多技术栈)、IOS(多技术栈)、WX(原生、非原生)、WEB、TOUCH.
防护组件(指纹、环境检测、接口防护等)、验证码组件、登录组件等.
在进行架构设计时,我会重点关注架构的这三大特性,分别是: 安全性、易用性、稳定性 .
因为是安全组件,其识别能力和组件自身安全性是首先要保证的.
组件会应用在各个场景,所以要尽可能降低由安全组件造成故障的概率.
尽可能降低业务接入的成本.
以接口防护组件设计来举例.
(以ip138查询网举例,不代表本人对该网站进行过攻击) 。
思路描述 。
请求离开容器后,通过抓包的方式,获取并解析数据,然后进行数据篡改、伪造鉴权,最后重新构造数据并发送请求.
攻击步骤 。
(1)抓包;(2)解析数据;(3)数据篡改;(4)伪造鉴权;(5)构造数据;(6)发送请求.
防止抓包 。
(1)抓包在应用外进行; 。
(2)除App,其他端防抓包基本不可防; 。
(3)防御性价比不高.
防止解析 。
解决方案是加密.
(1)入侵性较强、强依赖; 。
(2)加解密服务稳定性要求高; 。
(3)业务响应时长上升.
描述系统分层、职责、关系以及运行规则.
提供接口防护组件、验证组码件和登录组件.
通过数据共享或业务系统透传方式透传风控参数.
进行入参校验、版控、能力使用以及反制决策等.
提供接口检测能力等.
关于安全性另一篇文章《业务安全相关安全产品的反思》中已经详细阐述,这篇文章就不过多赘述。 https://www.cnblogs.com/boycelee/p/16223114.html 。
安全性的难点除了风险识别上的难点,还有就是面对 多个终端 (Android、iOS、小程序、PC、Touch),其底层逻辑完全不一样。 我们如何总结出统一的设计思想(方法论) 这样的类工程问题.
如防容器脱离,我总结的思想就是: 上层与业务逻辑建立联系,中层多个组件间建立联系,下层与操作系统(WX容器、浏览器)建立联系.
(1)组件化 。
关于前端组件的易用性,不能与业务过于耦合,需要根据业务特性进行适当地解耦。如果与业务系统过于耦合,首先是在对防护逻辑进行升级时势必会影响业务,就需要投入测试人力进行业务逻辑回归,其次是防护能力往其他场景迁移也会有代码重复冗余的问题.
(2)易用性提升 。
如何在组件化的前提下进行易用性提升?我坚持的原则是 尽量在不入侵业务的前提下,降低接入成本 .
我的解决方案是,结合项目前端技术栈特点进行如下选择:
a)方式一:是否有统一的网络框架?
如使用 安卓原生技术开发 、 苹果原生技术 开发一般企业都有统一的网络框架进行网络出口管理,这时组件就可以从中找一个 切面进行组件接入 .
b)方式二:是否有统一组件?
如 小程序(或Android Hybird等) 没有封装统一的网络库,而是页面直接使用HTTP协议发送请求,但有统一的工具库,此时可以帮业务提前做好组件引入工 作,业务使用时 直接本地调用即可。这也可以一定程度地提升易用性.
c)方式三:是否可以引入三方组件?
如 网页端(WWW、TOUCH) 提供好完整的风控.js文件,业务方使用时直接调用即可,虽然不如以上a、b两种方式更友好,但要强于代码拷贝的方案.
软件工程没有银弹,逆向工程永远胜利.
懂的不多,做的太少。欢迎批评、指正.
最后此篇关于基础安全产品相关系统设计的一些思考的文章就讲到这里了,如果你想了解更多关于基础安全产品相关系统设计的一些思考的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在学习 Spring 安全性,但我对它的灵活性感到困惑.. 我知道我可以通过在标签中定义规则来保护网址 然后我看到有一个@secure 注释可以保护方法。 然后还有其他注释来保护域(或 POJO)
假设有一个 key 加密 key 位于内存中并且未写入文件或数据库... byte[] kek = new byte[32]; secureRandom.nextBytes(kek); byte[]
我有 Spring Security 3.2.0 RC1 的问题 我正在使用标签来连接我 这表示“方法‘setF
我正在创建一个使用 Node Js 服务器 API 的 Flutter 应用程序。对于授权,我决定将 JWT 与私钥/公钥一起使用。服务器和移动客户端之间的通信使用 HTTPS。 Flutter 应用
在过去的几年里,我一直在使用范围从 Raphael.js 的 javascript 库。至 D3 ,我已经为自己的教育操纵了来自网络各地的动画。我已经从各种 git 存储库下载了 js 脚本,例如 s
在 python 中实现身份验证的好方法是什么?已经存在的东西也很好。我需要它通过不受信任的网络连接进行身份验证。它不需要太高级,只要足以安全地获取通用密码即可。我查看了 ssl 模块。但那个模块让我
我正在尝试学习“如何在 Hadoop 中实现 Kerberos?”我已经看过这个文档 https://issues.apache.org/jira/browse/HADOOP-4487我还了解了基本的
我有一个带有 apache2、php、mysql 的生产服务器。我现在只有一个站点 (mysite.com) 作为虚拟主机。我想把 phpmyadmin、webalizer 和 webmin 放在那里
前些天在网上看到防火墙软件OPNsense,对其有了兴趣,以前写过一个其前面的一个软件M0n0wall( 关于m0n0wa
我在 Spring Boot 和 oauth2(由 Google 提供)上编写了 rest 后端,在 "/login" 上自动重定向。除了 web 的 oauth 之外,我还想在移动后端进行 Fire
我想调用类 Foo,它的构造函数中有抽象类 Base。我希望能够从派生自 Base 的 Derived 调用 Foo 并使用 Derived覆盖方法而不是 Base 的方法。 我只能按照指示使用原始指
如何提高 session 的安全性? $this->session->userdata('userid') 我一直在为我的 ajax 调用扔掉这个小坏蛋。有些情况我没有。然后我想,使用 DOM 中的
我目前正在为某些人提供程序集编译服务。他们可以在在线编辑器中输入汇编代码并进行编译。然后编译它时,代码通过ajax请求发送到我的服务器,编译并返回程序的输出。 但是,我想知道我可以做些什么来防止对服务
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
目前,我通过将 session 中的 key 与 MySQl 数据库中的相同 key 相匹配来验证用户 session 。我使用随机数重新生成 session ,该随机数在每个页面加载时都受 MD5
Microsoft 模式与实践团队提供了一个很棒的 pdf,称为:“构建安全的 asp.net 应用程序”。 microsoft pdf 由于它是为 .Net 1.0 编写的,所以现在有点旧了。有谁知
在 Lua 中,通常会使用 math.random 生成随机值和/或字符串。 & math.randomseed , 其中 os.time用于 math.randomseed . 然而,这种方法有一个
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我们有一个严重依赖 Ajax 的应用程序。确保对服务器端脚本的请求不是通过独立程序而是通过坐在浏览器上的实际用户的好方法是什么 最佳答案 真的没有。 通过浏览器发送的任何请求都可以由独立程序伪造。 归
我正在寻找使用 WebSockets 与我们的服务器通信来实现 web (angular) 和 iPhone 应用程序。在过去使用 HTTP 请求时,我们使用请求数据、url、时间戳等的哈希值来验证和
我是一名优秀的程序员,十分优秀!