近日GitHub 官方博客更是宣布:" 腾讯微信现在是 GitHub 秘密扫描合作伙伴。"
“秘密扫描”是Github发起的一个计划,可别被它名字吓到了,它并不是说秘密的扫描用户的隐私数据,而是和微信合作发起,防止微信开发者的秘钥泄露。
该计划的大概功能,就是微信与Github合作秘密扫描,当用户发起请求,Github会对仓库进行秘密扫描,并把开发者的秘钥发送给微信,微信会匹配秘钥并通知受影响的用户,并用邮件通知用户,删除在Github的秘钥,并建议重置秘钥,这样才能最终保证安全。
下图就是Github与微信合作“秘密扫描”的整个流程。
总的来说就一句话:很多开发者把秘钥放在Github,“秘密扫描”会扫描秘钥,并让微信通知受影响的用户,并采用新的修复指引方案,避免秘钥泄露,产生数据安全问题。
目前加入GitHub 秘密扫描计划的服务提供商已有 56 家,其中还有 Meta、Figma、京东云和 Shopify 等。
开发者为什么会把秘钥上传至Github
大家明知道不安全,为什么还有那么多开发者会把秘钥上传至Github呢?只有一个原因,那就是追求开发效率。
在我们做项目开发过程中,避免不了要调试代码,特别是与微信这种外部系统联调,很多公司都会直接用真实的密钥进行调试,这样就能保证联调是没问题的。
虽然每一家公司都会强调,秘钥用完后,要记得删除,不可和代码一起提交。但是这个问题还是会大概率出现,因为人不是机器,你一年操作100次就有可能出错一次,你一直都没出错,团队成员终究可能出错一次。
人终究会犯错,所以我们必须寻找解决方案。
解决方案
出现以上问题,就一个原因就是秘钥放在源码里面了,那我们就不要把秘钥放在源码里,就解决问题了,但是这样又产生新的问题,怎么调试的问题?
针对这个问题,要做好以下几点:
开发安全
1、沙箱
成熟的开放平台,大部分都有沙箱环境,这是开放平台的模拟环境,日常开发中可以用好沙箱这个功能,基本可以完成大部分的接口联通工作。
2、Mock
Mock就是自己制造测试环境,模拟开放平台的环境,这个与沙箱类似,但是缺点就是需要额外功能的开发,工作量比较大。
3、申请备用Key
申请备用Key,这也是很多公司的做法,正式的Key涉及真实用户的数据,这些数据安全性、敏感度都比较高,而额外申请一个备用Key,就能在真实的环境里面测试,还没有额外的工作量。
4、单独测试服务器
虽然申请备用Key,可以解决大部分的问题,但是备用Key是没有大量的数据的,在大量数据测试的场景,使用备用Key就无法联调,这时候可以申请一台单独服务器用来测试。
代码安全
以上是针对日常开发要做的,其实在代码内部也有需要做的:
1、密钥加密存储
针对系统任何敏感数据,都是要最高级别对待,必须进行加密存储,避免代码泄露,或者内部人员直接拿去使用。
2、IP绑定
对于敏感数据的接口,都需要绑定IP白名单,避免密钥泄露,系统接口被调用。
3、接口调用日志保存、跟踪
敏感数据的接口,都必须有日志功能,并针对业务场景,进行风控管理,自动发送系统提醒、短信提醒、邮件提醒等方案。
运维安全
服务器方面安全很重要的,运维工作也是项目的一部分,要做好几点:
1、服务器登录日志
服务器远程登录日志,必须记录保存,并进行异常跟踪提醒。避免由于服务器密码泄露,导致产生数据安全问题。
2、服务器操作日志
服务器操作的日志,也是需要记录保存的,特别是一些敏感的操作,比如进入敏感的文件目录、拷贝敏感的数据等。
3、服务器登录,进行短信提醒
针对高级别的数据,需要对服务器登录进行实时提现,比如进行短信提醒。
4、云盾
现在很多云服务器,都有提供云盾的功能,类似于我们登录验证,每一次登录都需要额外输入验证码,才能登录。这样一方面是方便记录登录日志,也是避免系统密码泄露,被直接登录。
安全与效率
系统的安全涉及是方方面面的,要保证系统安全,必然会影响开发进度,所以这也是很多企业,为了生存和发展,忽略了安全的问题。
但是数据安全还是非常重要的,也是根本,所以牺牲一定的工作效率,来保证安全还是很有必要的。
- End -
推荐阅读
盘点6个.NetCore+Vue前后端分离的开源项目
盘点5个C#实用的Word、PPT、Excel、Mail第三方库
一个C#开发的Windows远程桌面工具
盘点10个Web开发人员必备的最佳开发工具推荐
开源免费WMS仓库管理系统【推荐】