从B站的代码泄露事件中,我们能学到些什么?
先声明一下,本文不聊ISSUE中的七七八八,也不聊代码是否写的好,更不聊是不是跟蔡徐坤有关之类的吃瓜内容。仅站在技术人的角度,从这次的代码泄露事件,聊聊在代码的安全管理上,通常都需要做哪些事来预防此类事件的发生。同时,大家在阅读本文的时候,也可以深入思考下,自己团队是否也存在类似的问题,经过这次的事件,是否有必要针对性的做一些优化。
最小权限
“最小权限”原则是我们在学习Linux用户管理时候经常被提到,并且被反复强调的内容。该原则是指每个程序和系统用户都应该具有完成任务所必需的最小权限集合。赋予每一个合法动作最小的权限,就是为了保护数据以及功能避免受到错误或者恶意行为的破坏。
在代码的安全管理上,“最小权限”原则同样适用。但是,从此次的代码泄露内容中可以看到,这一点做的并不好,一起来看看源自泄露代码的README介绍:

从说明中,可以知道这是一个后端项目的大仓库,每个业务线都通过文件夹的方式管理自己的业务模块。那也就是说,每个业务模块的人都是可以看到这个大仓库的。继续看README最后的负责人信息:

可以看到这个大仓库中包含了非常多的业务模块与相关负责人信息。
由于Git的权限管理都是对整个仓库的,无法精细化到具体的文件夹。换言之,对于这个大仓库的访问,其实是有非常多的人员可以拿到全量代码的,而其中有大部分代码可能并不是自己业务线的内容。可见,这个仓库的内容,对于代码自身的保护上,并没有做到最小权限控制。所以,当出现代码泄漏的时候、对于泄露范围就很难控制。可能一个小环节的过失,就会导致非常大的泄漏灾难。
配置分离
配置与代码的分离,自云原生应用的流行开始,就一直被反复的强调。将配置内容隔离开之后,赋予代码的将仅仅是逻辑,对于各种与环境相关的敏感信息都应该被剥离出去,这就使得代码中将不再含有各种环境信息和敏感信息。同时,这么做也可以轻松的实现多环境的不同配置,这种实现方式与我们传统通过构建工具来实现的多环境是完全不同的。只有在严格分离了配置之后,才真正的可以实现:一次构建,多处运行的目标。基于构建工具实现的多环境部署,实质上多次构建,多处运行的结果,每个环境运行的介质只是上都不是同一个程序。
为什么要强调这一点呢?同样的,我们看看从网络上流出的一段代码片段:

如果这段代码是真实存在的话,那么配置管理和安全意识上确实就做得非常差了。
所以,对于配置中心的建设,大论大小团队,从安全角度上来说,都是非常重要的。何况在目前有大量开源配置中心的大背景之下,做到配置分离,是一件性价比非常高的事。如果做到这一点,那么即使代码有流出,对于重要密钥、数据库账户密码等等敏感信息也不会被泄露。
外部监控
任何与安全相关的内容,都少不了监控。事前的所有策略,最终都有可能被一一击破,留给我们最后的一道防线就是在事件发生之后马上得将其堵住,以防止问题的扩大,而造成更大的损失。
在笔者知道这件事的时候,距离代码上传已经有6小时之久了。各类技术讨论群中几乎也都是相关信息的八卦。几乎每一次刷新页面,都是几百Star的增长。虽然处理的速度不能说快,但是没过多久,与之相关的仓库都开始无法访问。至于,是不是有做代码泄露扫描的监控,我们不得而知。因为,在扫描告警之后,对于代码的扩散控制,作为B站来说,本身是被动的,还是需要Github等仓库运营方来完成。所以,这中间到底哪一步慢了,我们无法考证。
不过这些都不重要,这里主要强调一点,除了管理上的防护之外,必须留一手外部监控,以快速的发现泄漏并采取措施。这块可能大部分开发人员不太了解,这边我就稍微提一下。做一下这个是不是很费劲?
对于很多中小团队来说,可能本身就没有什么人力去做这件事,那么是不是就没办法了呢?实际上,很多安全服务商,甚至一些大型互联网公司都有提供这样的产品服务。如果说,你连买这类产品的钱都不想出,那么顺手推荐一个开源项目可以参考一下:Github leaked patrol
最近,欢迎留言交流,说说大家所在团队对于代码的安全性都是如何做的?用了什么商业服务?或是用了什么开源软件?欢迎一起分享学习与进步!
从B站的代码泄露事件中,我们能学到些什么?的更多相关文章
- 武器级工具包 Immunity Canvas 7.26 泄露事件 | 附下载地址
关于Immunity Canvas Immunity CANVAS是Immunity公司的一款商业级漏洞利用和渗透测试工具,包含了480多个以上的漏洞利用,该工具并不开源,其中文版介绍如下: &quo ...
- 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了
系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...
- [转帖]御界预警:3700余台SQL服务器被入侵挖矿 或导致严重信息泄露事件
御界预警:3700余台SQL服务器被入侵挖矿 或导致严重信息泄露事件 https://zhuanlan.kanxue.com/article-8292.htm sqlserver的弱密码破解和提权攻击 ...
- 【转载】Asp.net网站安全:去除网站根目录下的备份文件防止代码泄露
很多网站运维人员在更新网站版本的时候,喜欢直接在网站目录文件夹中直接压缩原来的网站文件,如果这个备份压缩文件没有移动出去,这样是非常不安全的,有些网站攻击者可能会尝试访问你网站下有没有对应名字的压缩备 ...
- 在Application_Error事件中获取当前的Action和Control
ASP.NET MVC程序处理异常时,方法有很多,网上也有列举了6种,下面是使用全局处理在Global.asax文件的Application_Error事件中实现.既然是ASP.NET MVC,我需要 ...
- 功能源代码(扇形进度)及Delegate运用在开放事件中、UINavigationController的封装
1:扇形进度视图及运用 首先先创建扇形的视图,传入进度值 #import <UIKit/UIKit.h> @interface LHProgressView : UIView @prope ...
- DOM - 5.事件冒泡 + 6.事件中的this
5.事件冒泡 如果元素A嵌套在元素B中,那么A被点击不仅A的onclick事件会被触发,B的onclick也会被触发.触发的顺序是"由内而外" .验证:在页面上添加一个table. ...
- ASPxTreeList控件去根节点的新增修改操作(写在onCommandColumnButtonInitialize()事件中)
treelist去掉根节点按钮效果图: //去掉父节点及子节点旁的新增.修改.删除操作(写在onCommandColumnButtonInitialize事件中) protected void Tre ...
- ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_201 ...
随机推荐
- Java单元测试初体验(JUnit4)
什么是单元测试 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应 ...
- 用beego开发服务端应用
用beego开发服务端应用 说明 Quick Start 安装 创建应用 编译运行 打包发布 代码生成 开发文档 目录结构说明 使用配置文件 beego默认参数 路由设置 路由的表述方式 直接设置路由 ...
- C++11标准中常用到的各种算法汇总.
在C++11标准中定义了很多算法,这些算法可以让我们很方便的操作各种容器和数组,这里要注意一下,这些算法操作的并非容器,而是迭代器,然后通过迭代器来操作容器中的数据,算法本身并不会关注容器中保存的数据 ...
- 树莓派使用modbus与stm32通信
树莓派+stm32开发板通信树莓派上使用java+jamod实现.jamod官网stm32使用freemodbus实现
- 在ASP.NET Core中给上传图片功能添加水印
在传统的.NET框架中,我们给图片添加水印有的是通过HttpModules或者是HttpHandler,然后可以通过以下代码添加水印: var image = new WebImage(imageBy ...
- Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干
常见验证码 之前的博客中已经解决了一些常见验证码的问题,但是验证码是层出不穷的,目前解决验证码除了通过常规手段解决以外,还可以通过人工智能领域的深度学习去解决 深度学习?! 无疑对爬虫coder提高了 ...
- 我的Windows装机必备软件与生产力工具
目录 系统工具 工作学习 开发工具 VS插件 2018年12月21日,最近要装新电脑,借此将自己常用的工具总结一下. 系统工具 wox,软件快速启动工具,有翻译等插件 everything,本地文件文 ...
- DSAPI多功能组件编程应用-HTTP监听服务端与客户端_指令版
前面介绍了DSAPI多功能组件编程应用-HTTP监听服务端与客户端的内容,这里介绍一个适用于更高效更快速的基于HTTP监听的服务端.客户端. 在本篇,你将见到前所未有的超简化超傻瓜式的HTTP监听服务 ...
- arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)
你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...
- 历经15个小时,终于评出这8本最受欢迎的SQL书籍
文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 程序员书库(ID:OpenSourceTop) 原文链接 | https://www.lif ...