大家 web 开发时,是怎么样保障正式数据库的账号安全的?

2021-03-29 11:19:28 +08:00
 godall
大家开发程序时,程序连接数据库一般怎么保存账号和密码的?

1. 写死在程序里(应该除了大学实习外没人这么干了)
2. 写在配置文件里——明文(很多人都这么用)
3. 写在配置文件里——加密(很多人都这么用)
4. 其他


我感觉 2,3 也都不是很安全啊,大家有什么办法?
8190 次点击
所在节点    程序员
75 条回复
Drinker
2021-03-29 17:16:28 +08:00
一般写在配置文件里面,做好服务器的防护。
不嫌麻烦的话配置文件里面的密码加密一下,连接数据库的时候解密使用解密后的密码连接。
huobazi
2021-03-29 17:16:32 +08:00
上配置中心
tiedan
2021-03-29 17:23:49 +08:00
配置中心下发
sanyuedev
2021-03-29 17:26:33 +08:00
@ysicing 没错 ,通过程序漏洞拿到 shell 直接就日穿
ren2881971
2021-03-29 17:28:34 +08:00
@bthulu 你们这个狠啊。。。
CRVV
2021-03-29 17:43:03 +08:00
重点不是把密码写在哪里,即使是写在代码里面,只要代码不泄漏就是安全的。
当然有代码权限的人通常很多,所以不泄漏代码通常会困难一些。
如果你的代码的价值比数据的价值更高,那你直接写在代码里就好了,没必要折腾别的。

重点是要怎么保证密码不被别人拿到。
比如用加密的配置文件,那么重点是你要把密钥放在哪里,如果密钥和配置文件在一起,加密就是没用的。
如果你有一个安全的地方存密钥,当然也可以直接用这个安全的地方存配置文件,那么加密就是没必要的。

AWS GCP 都有 secret manager 来做这件事情。
当然如果你真的想要保证安全,只是上一个现成的服务当然解决不了问题。比如很多人喜欢在程序启动的时候把配置记在日志里,比如很多开发人员都有登录到服务器上的权限,这些地方都能拿到密码。
tabris17
2021-03-29 17:45:46 +08:00
写环境变量里
ily433664
2021-03-29 18:00:42 +08:00
放到 github 上面(狗头)
feitxue
2021-03-29 18:45:16 +08:00
@bthulu #30 大佬这是一本正经说笑还是确有此事
oyasumi
2021-03-29 19:20:17 +08:00
数据库和服务器加 ip 限制
zgzhang
2021-03-29 19:38:56 +08:00
@godall 使用过的比较好的方式是配置中心,DBA 给一个 key 就好了,需要开发一个插件,也不复杂
cway
2021-03-29 19:51:30 +08:00
不允许远程登陆就行了
xuanbg
2021-03-29 19:56:05 +08:00
1 、配置中心。只需要运维人员掌握权限即可。
2 、打包脚本替换配置文件,打包服务器只允许运维访问。别人要打包发布通过 Jenkins 运行脚本。
3 、各种骚操作,但难度比上面两个办法要大。
abcbuzhiming
2021-03-29 23:30:20 +08:00
@3dwelcome 你真实想多了,你服务器都被日穿了,黑客压根不需要调试你的程序,拿到你的程序后,程序本地跑起拦截你的网络连接请求做中间人攻击,就能截到你的账号密码。

最安全的方式永远是不要让黑客接触到你的程序,一旦接触到你的程序了,什么都是白塔。为什么服务器程序在正常情况下默认比客户端程序安全的多,就是因为正常情况下认为黑客是接触不到服务器程序本体的。一旦这道防火墙被打破,靠什么加密程序,都是骗自己的
abcbuzhiming
2021-03-29 23:32:34 +08:00
@bthulu 这倒是一个新奇的思路,可以保证秘钥只在内存里存在,而且很难拿到,问题是,你司启动一个服务要半个到一个小时?
freelancher
2021-03-30 00:05:27 +08:00
一堆菜鸡在瞎猜。请个 DBA 。每个账户都可以限定 IP 和权限的。非机器 IP 无法操作。机器都黑进去了。有毛用。
IvanLi127
2021-03-30 00:35:24 +08:00
一般来说,服务器被入侵了配置文件才可能泄露。可是你家被偷了,你在意这个?人家 hook 你程序搞事情就行了,毕竟正常拿到数据库权限在其他地方也访问不到,权限都限着呢
3dwelcome
2021-03-30 00:48:04 +08:00
@abcbuzhiming "你真实想多了,你服务器都被日穿了,黑客压根不需要调试你的程序,拿到你的程序后,程序本地跑起拦截你的网络连接请求做中间人攻击,就能截到你的账号密码。"

上面提到了,程序是和机器绑定在一起的,换了 IP 或换了硬件配置,程序就自动失效了,接口返回的都是错乱数据。
而且程序本体是封装在 Linux KVM 里面运行的,正常黑客没有 root 密码,系统进都进不去,更别说调试了。
henryhu
2021-03-30 00:48:05 +08:00
防自己人,代码还是程序员写的,是不是得先防程序有后门,防不胜防啊
jones2000
2021-03-30 00:57:48 +08:00
上线给部署文档如何配置账户, 保存的时候 base64 一下就可以了。明文不行,出了问题运维要跟你扯皮的。由运维组自己去配置账户,开发不用管了。账号泄露也是运维的问题, 跟开发就没什么关系了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766088

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX