关于如何防止系统泄漏
场景
- 用户的账户信息客户电脑端登录后,账户信息没有被及时的清理缓存数据和账户信息
- 用户将账户信息借给朋友查看系统
- 用户的电脑被借用后登录查看系统
解决方案
针对上述几种场景,只能在技术上做一定的规避提示,无法从根源上彻底解决此问题,原因有以下几点
- 如果用户和竞争对手的人员关系比较好,除了用户的主观意识外,没有其他的手段可以避免,无论怎么样的验证,都没有方法可以避免用户的自己正常访问,用户可以通过录屏、截屏等方式做备份查阅
- 如果用户在客户的电脑上登录系统后,没有清除历史记录和保存了密码信息,竞争对手也可以通过客户的客户端去访问系统并查看系统
- 用户将信息系统借给竞争对手使用,这种情况用户也可以解释为因业务需要再其他的设备进行登录
基于上述几点的原因,要想从根本上去杜绝系统被竞争对手查看,更多的需要对用户进行安全信息的相关培训,外加当前用户的登录操作日志协助追溯用户是什么时候被什么设备登录
综上所述,解决方案概述为
- 对用户的当前登录设备和当前登录的IP信息进行记录,对于新的设备和ip给于异地登录提示,并且需要用户输入验证码,已确保是用户本人登录
- 严格的控制权限控制
- 用户行为检测
登录历史日志记录
- 获取设备的唯一标识和登录IP信息,发送给后端记录,
对于IP的准确性而言,没有任何实际的意义,因为只是提供一个非常用环境登录的提示,本地IP拿到的是局域网的IP,而服务端拿到的是转发中某一层的网关IP,由于我们只是针对上一次的信息比较,所以IP从哪里来无所谓,考虑到服务端获取IP信息比较简单,因此可以服务端获取
获取设备的唯一标识,由于浏览器并没有对外暴露获取任何电脑硬件设备的API,因此只能借助于第三方服务,但是也会产生一个问题,如和将获取到的mac信息发送给浏览器从而前端获取到
关于如何获取设备的唯一标识
使用c++,c#,java等高级语言,获取,然后在本地在建立一个websocket的服务,通过webscoket的服务将数据发送给前端,然后前端发送后端进行校验
如果采用了上述方法,还不用不适用设备的mac,后端人员讨论的接口是使用网络的mac,但是这个设备又不是唯一的,因此可以我们自己生成秘钥,加入用户信息,过期时间,申请时间等附加,以便后续查询
不推荐node的原因,node生成的客户端信息体积过大,不如使用c++,c#,java等高级语言生成。第二底层高级语言对硬件设备的获取更加友好方便
严格的控制权限控制
此方法主要针对的是用户没有权限查看到所有的页面,只能获取的部分页面,无法从整体了解系统和数据的流向,从而防止竞争对手对系统核心功能的深入了解
- 针对不同的角色设置不同的页面权限,目前平台页面级别的权限颗粒度不够细致,可以新增针对不同角色的页面控制权限
- 针对不同的角色设置不同的数据权限如给用户设置作业区的数据而非父级的采用厂或者更大的部门权限等
- 针对大屏页面,对子级页面根据用户设定不同的查看权限
用户行为检测
此方法是针对页面的日常行为分析,如果平常只查看3,4个页面,后面查询页面数据突然新增,则系统可能被非用户人员查看
- 记录用户登录后访问的页面历史,做分析报告
- 定期检测用户登录系统的活跃度,及时删除用户以及降低用户的权限
这篇文章我是真心不想写啊,只是没有想到我有有一天会遇到这样的需求,几个后端在那讨论前端怎么获取电脑IP和电脑的mac,权当无聊记录下吧