背景
大早上收到一封邮件
内容如下:
大致内容是Azure DevOps Personal Access Token(简称PAT)被吊销了,原因是PAT内容出现在了Github的公开仓库中。
问题
发生了什么?
我想想,昨天是不是发布了一篇文章,文章的内容是介绍 "躺平" 插件的开发和发布过程。
没错,就是它 ------ VSCode插件 - "躺平" 开发和发布
由于不想在文章里po过多的代码,所以我好像公开了 "躺平" 插件的源码库,源码库就在Github上。
而且,我为了发布插件的时候不用输入复杂的发布命令和PAT,把发布命令和PAT放在了package.json里面。
json
// package.json
{
...
"scripts": {
...
// 终端执行yarn vp即可完成上传插件的操作,后面那一串就是PAT
"vp": "vsce publish -p 6ez3pluc3g3ugp7tltxmmyfeocj3iry2rqf6c4g3i7pk476cjnja"
}
...
}
再仔细看看邮件
发现里面提到了:The revoked PAT is found in the following GitHub public repository.
github.com/EvenZhu/lyi...
果然,就是在这个文件里暴露PAT导致了风险,而Azure DevOps Security发现了这个暴露风险,所以把PAT撤销了。
撤销的理由其实很充分,作为公开访问的库,意味着所有人都可以看到这个代码库里面的任何内容,当然也包含这个PAT,而我们只要有这个P只要就可以完成插件的上传、发布、更新动作。如果有人拿着这个PAT直接把有害或者违规的代码发布了,确实很危险。
感谢微软
我承认我是没有这个安全意识的,现在也认识到了这一点,以后一定要引以为戒。
分析
等等,他们是怎么实现的呢?
VSCode是微软的产品,Github被微软收购了,也是微软的产品,So,数据互通了。
我比较好奇的是,他们难道是对每一次用户上传到公开代码库或者把私有库转为公开库的源码进行了检测。而检测规则里面有一条是否包含PAT,如果包含就吊销?那这样的话每一次查询都需要全量获取Azure DevOps 平台所有的PAT进行匹配?应该不是这么简单,这个机制比较简单,但是过程肯定进行了深度的优化,有时间去研究一下。
解决方案
把放在package.json中的,包含PAT内容的发布VSCode插件的命令删除掉。重新获取PAT,将发布命令和新的PAT放在本地的.zshrc中,用配置命令别名的方式去实现快捷命令即可。
这样既不会发布到互联网上,产生暴露风险。也能实现,一个简单指令就可以轻松发布和更新VSCode插件的效果。
总结
- 作为程序员,要有足够的安全意识
- 强大的技术能力能够支撑起一个好产品
- 有效地利用和整合资源,才能做出好产品
- 一家做产品的公司,具备服务用户的意识很重要
- 学无止境,身体和灵魂要有一个在路上,这样才可以每天提升一点点
PS:如果有需要补充的内容,请在评论区留言
转载时请注明"来自掘金 - EvenZhu"