0x1本周话题
话题一:大家数据库是怎么做管理和防护的?目前我们是将数据库加到堡垒机,但有一些开发人员需要在本地电脑直连数据库。
A1:通过堡垒机和直连没有区别,堡垒机通过协议代理,理论上操作没差别。
A2:怎么可能会有一些开发人员需要在本地电脑直连数据库的场景,一律禁止;只要非业务连接,全都断掉,仅允许通过堡垒机访问。数据库端口禁止向互联网开放,办公网也不行。
Q:现在是有些业务系统直接在生产环境进行二次开发,需要在生产环境二次开发的怎么管理呢?
A3:本地也可以通过堡垒机,堡垒机支持很多数据库客户端了,除非你的堡垒机功能有限,那就只能换。开发一般不能访问生产环境的,要做二次开发,从生产拉脱敏的数据到测试环境吧。开发人员不应该有生产环境数据库访问的访问权限,应该访问非生成环境的测试数据。
A4:小团队,用本地的数据库测试就可以了,没有必要直接连生成数据库。另外,开发甚至不用数据库,用Mock技术就可以了,这个很成熟了,如果开发人员还需要一定连生产环境数据库,只能说开发人员的水平有点差。有也是用于运维的时候,不是开发的时候。比如通过堡垒机。开发人员直接通过代码去调试生产环境的数据库,这个有多么的危险,搞不好就出事故了。
A5:开发人员有生产环境数据库访问的访问权限,各种IT审计都过不了。
A6:如果写代码也在本地,那本地电脑本质就是个开发环境,按开发环境管理,开发应用连开发数据库比较正常,开发人员直连生产数据库,确实是无论如何都禁止的,即使devops也不允许。
话题二:开源更安全or更不安全?自己造轮子or不重复造轮子?及时更新or不更新?
A1:安全不安全跟开源不开源没关系,老有一些开源比闭源更安全或者开源的安全就是个笑话根本没人审查的争论。造不造轮子也跟安全没关系。
更新这个我觉得要走两个极端:要么就一直不更新,要么就实时更新。一直不更新还没出问题,说明是安全稳定的。实时更新1day及时修复,更安全。
A2:造轮子倒有关系,比如我们这,实现简单功能时就会告诉初级员工,开源代码可以看看,自己实现就完了,看不懂逻辑的别引入进来一堆组件。关键问题是目前的开源是组件套组件,安装一个包给你安装了100个依赖,不可能100个依赖都看一遍。所以还不如自己实现简单功能,保留有用部分。
A3:我上周刚做了一个内部培训:30行代码实现RAG+前后端。这种不用开源组件,大概300行也搞不定。调了两个开源组件,一个是负责rag,一个负责写前后端。其实30行只是主程序的30行,背后别人把上万行写好了罢了。
A4:这个要求有点高了吧,而且安全团队是主导不了开发团队用啥的。除非把重心放在核心关基系统上这么搞可能还能接受些。为了可能的安全隐患,结果开发工作量翻N倍,对开发人员能力要求翻N倍,开发效率降低N倍。
A5:安全自己的人,有的人写一个字典树也要引入组件,又不看源码,真成了码农了。上面说的简单功能不超过一天开发量,不能说是规范要求什么的,就是要清楚自己写了啥这种朴素道理 或者可以算是代码审查的要求吧。展开下,其实引入组件也有引入组件的选型标准,比如维护频率,安全更新,案例等,不应该随便找一个功能能用的就复制粘贴,越复杂越容易出问题,不要的东西就该裁剪掉,这种最小原则嘴上说说简单,做起来违反人性。
A6:不用说服别人,说服自己就行。比如要保障稳定,那就给引入组件设置流程,倒逼开发权衡下利弊,比如要抢占市场,也不直接暴露攻击面,那肯定怎么快怎么来,安全可以事后找补。
Q:引入组件是设置流程,这个流程会不会有巨大的精力维护?或者是不是可以维护内部的组件库,只允许引用这些要求范围内的,超出范围内的走流程。但是这也会因为组件众多且版本不停的在更新,带来非常大的维护成本。
A7:已经进来了就不用再评审了,关键是外部引入进来。我理解有的行业规范是有这个要求的,比如我们就按上级单位要求有这个流程,但一般不适用于互联网,就像你说的满足不了迭代需求。