先声明一下,本文不聊ISSUE中的七七八八,也不聊代码是否写的好,更不聊是不是跟蔡徐坤有关之类的吃瓜内容。仅站在技术人的角度,从这次的代码泄露事件,聊聊在代码的安全管理上,通常都需要做哪些事来预防此类事件的发生。同时,大家在阅读本文的时候,也可以深入思考下,自己团队是否也存在类似的问题,经过这次的事件,是否有必要针对性的做一些优化。

最小权限

“最小权限”原则是我们在学习Linux用户管理时候经常被提到,并且被反复强调的内容。该原则是指每个程序和系统用户都应该具有完成任务所必需的最小权限集合。赋予每一个合法动作最小的权限,就是为了保护数据以及功能避免受到错误或者恶意行为的破坏。

在代码的安全管理上,“最小权限”原则同样适用。但是,从此次的代码泄露内容中可以看到,这一点做的并不好,一起来看看源自泄露代码的README介绍:

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

可以看到这个大仓库中包含了非常多的业务模块与相关负责人信息。

由于Git的权限管理都是对整个仓库的,无法精细化到具体的文件夹。换言之,对于这个大仓库的访问,其实是有非常多的人员可以拿到全量代码的,而其中有大部分代码可能并不是自己业务线的内容。可见,这个仓库的内容,对于代码自身的保护上,并没有做到最小权限控制。所以,当出现代码泄漏的时候、对于泄露范围就很难控制。可能一个小环节的过失,就会导致非常大的泄漏灾难。

配置分离

配置与代码的分离,自云原生应用的流行开始,就一直被反复的强调。将配置内容隔离开之后,赋予代码的将仅仅是逻辑,对于各种与环境相关的敏感信息都应该被剥离出去,这就使得代码中将不再含有各种环境信息和敏感信息。同时,这么做也可以轻松的实现多环境的不同配置,这种实现方式与我们传统通过构建工具来实现的多环境是完全不同的。只有在严格分离了配置之后,才真正的可以实现:一次构建,多处运行的目标。基于构建工具实现的多环境部署,实质上多次构建,多处运行的结果,每个环境运行的介质只是上都不是同一个程序。

为什么要强调这一点呢?同样的,我们看看从网络上流出的一段代码片段:

如果这段代码是真实存在的话,那么配置管理和安全意识上确实就做得非常差了。

所以,对于配置中心的建设,大论大小团队,从安全角度上来说,都是非常重要的。何况在目前有大量开源配置中心的大背景之下,做到配置分离,是一件性价比非常高的事。如果做到这一点,那么即使代码有流出,对于重要密钥、数据库账户密码等等敏感信息也不会被泄露。

外部监控

任何与安全相关的内容,都少不了监控。事前的所有策略,最终都有可能被一一击破,留给我们最后的一道防线就是在事件发生之后马上得将其堵住,以防止问题的扩大,而造成更大的损失。

在笔者知道这件事的时候,距离代码上传已经有6小时之久了。各类技术讨论群中几乎也都是相关信息的八卦。几乎每一次刷新页面,都是几百Star的增长。虽然处理的速度不能说快,但是没过多久,与之相关的仓库都开始无法访问。至于,是不是有做代码泄露扫描的监控,我们不得而知。因为,在扫描告警之后,对于代码的扩散控制,作为B站来说,本身是被动的,还是需要Github等仓库运营方来完成。所以,这中间到底哪一步慢了,我们无法考证。

不过这些都不重要,这里主要强调一点,除了管理上的防护之外,必须留一手外部监控,以快速的发现泄漏并采取措施。这块可能大部分开发人员不太了解,这边我就稍微提一下。做一下这个是不是很费劲?

对于很多中小团队来说,可能本身就没有什么人力去做这件事,那么是不是就没办法了呢?实际上,很多安全服务商,甚至一些大型互联网公司都有提供这样的产品服务。如果说,你连买这类产品的钱都不想出,那么顺手推荐一个开源项目可以参考一下:Github leaked patrol

最近,欢迎留言交流,说说大家所在团队对于代码的安全性都是如何做的?用了什么商业服务?或是用了什么开源软件?欢迎一起分享学习与进步!

从B站的代码泄露事件中,我们能学到些什么?的更多相关文章

  1. 武器级工具包 Immunity Canvas 7.26 泄露事件 | 附下载地址

    关于Immunity Canvas Immunity CANVAS是Immunity公司的一款商业级漏洞利用和渗透测试工具,包含了480多个以上的漏洞利用,该工具并不开源,其中文版介绍如下: &quo ...

  2. 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了

    系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...

  3. [转帖]御界预警:3700余台SQL服务器被入侵挖矿 或导致严重信息泄露事件

    御界预警:3700余台SQL服务器被入侵挖矿 或导致严重信息泄露事件 https://zhuanlan.kanxue.com/article-8292.htm sqlserver的弱密码破解和提权攻击 ...

  4. 【转载】Asp.net网站安全:去除网站根目录下的备份文件防止代码泄露

    很多网站运维人员在更新网站版本的时候,喜欢直接在网站目录文件夹中直接压缩原来的网站文件,如果这个备份压缩文件没有移动出去,这样是非常不安全的,有些网站攻击者可能会尝试访问你网站下有没有对应名字的压缩备 ...

  5. 在Application_Error事件中获取当前的Action和Control

    ASP.NET MVC程序处理异常时,方法有很多,网上也有列举了6种,下面是使用全局处理在Global.asax文件的Application_Error事件中实现.既然是ASP.NET MVC,我需要 ...

  6. 功能源代码(扇形进度)及Delegate运用在开放事件中、UINavigationController的封装

    1:扇形进度视图及运用 首先先创建扇形的视图,传入进度值 #import <UIKit/UIKit.h> @interface LHProgressView : UIView @prope ...

  7. DOM - 5.事件冒泡 + 6.事件中的this

    5.事件冒泡 如果元素A嵌套在元素B中,那么A被点击不仅A的onclick事件会被触发,B的onclick也会被触发.触发的顺序是"由内而外" .验证:在页面上添加一个table. ...

  8. ASPxTreeList控件去根节点的新增修改操作(写在onCommandColumnButtonInitialize()事件中)

    treelist去掉根节点按钮效果图: //去掉父节点及子节点旁的新增.修改.删除操作(写在onCommandColumnButtonInitialize事件中) protected void Tre ...

  9. ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_201 ...

随机推荐

  1. 【codeforces 718 C&D】C. Sasha and Array&D. Andrew and Chemistry

    C. Sasha and Array 题目大意&题目链接: http://codeforces.com/problemset/problem/718/C 长度为n的正整数数列,有m次操作,$o ...

  2. 【莫比乌斯反演】BZOJ1101 [POI2007]zap

    Description 回答T组询问,有多少组gcd(x,y)=d,x<=a, y<=b.T, a, b<=4e5. Solution 显然对于gcd=d的,应该把a/d b/d,然 ...

  3. 硬木地板 JDFZ1667

    Description 举行计算机科学家盛宴的大厅的地板为M×N (1<=M<=9, 1<=N<=9)的矩形.现在必须要铺上硬木地板砖.可以使用的地板砖形状有两种:1) 2×1 ...

  4. Python 命令行(CLI)基础库

    在 CLI 下写 UI 应用 前阵子看了一下自己去年写的 Python-视频转字符动画,感觉好糗..所以几乎把整篇文章重写了一遍.并使用 curses 库实现字符动画的播放. 但是感觉,curses ...

  5. C++ set用法以及迭代器用法

    有关set的一些常用函数 1.begin() / end() 返回首/尾元素迭代器 2.rbegin() / rend() 返回尾/首元素反向迭代器,反向迭代器可以反向遍历容器的迭代器,从下面的程序已 ...

  6. java happens-before原则规则

    程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作: 锁定规则:一个unLock操作先行发生于后面对同一个锁额lock操作: volatile变量规则:对一个变量的写操 ...

  7. ssh框架整合笔记

    1.建立普通的Javaweb项目,导入项目所必须的jar包. 2.配置web.xml文件. web.xml  3.在src下建立struts.xml. struts.xm 4.在实体包下配置  实体名 ...

  8. [dotnet] 封装一个同时支持密码/安全密钥认证的SFTP下载器,简单易用。

    前言 最近在开发订单对账系统,先从各种支付平台获取订单销售数据,然后与公司商城订单数据进行对账兜底.总体上,各个支付平台提供数据的方式分为两类,一般以接口的方式提供实时数据,比如:webservice ...

  9. dotnet-warp && NSSM 部署 .net core 项目到 windows 服务

    如果你想将 .net core 项目以服务的形式部署到 windows 系统,希望本篇文章能够让你少走弯路 dotnet-warp 安装使用 dotnet-warp 是一个全局的.NET Core 工 ...

  10. 【ODI】| 数据ETL:从零开始使用Oracle ODI完成数据集成(一)

    0. 环境说明及软件准备 ODI(Oracle Data Integrator)是Oracle公司提供的一种数据集成工具,能高效地实现批量数据的抽取.转换和加载.ODI可以实现当今大多数的主流关系型数 ...