原问题地址在这里:node-js-server-code-security-issue
大概意思就是:
我的服务器需要的一些敏感信息都会加密存储到google drive上,这样不至于服务器被黑后敏感信息泄露。
但是google drive的话client_id和client_secret什么的都写在配置文件里面,服务器被黑了黑客一花点时间读代码就可以自己去从google drive上取这些敏感信息了。
所以我初步思路是在配置文件中使用对称加密对这些配置信息进行加密存储,然后程序启动时在环境变量中设置密钥,这样密钥就不会被暴露了。
这个方法总感觉不靠谱,有点野路子,不知道有没有一些标准的解决方案。
1
TangMonk 2014-08-27 08:51:56 +08:00
喜欢玩火女?
|
3
shuax 2014-08-27 09:02:12 +08:00
服务器都能被黑,还有什么安全可以讨论的。
|
5
ptyfork 2014-08-27 09:10:46 +08:00 1
这跟node.js有一丁点关系?
|
6
ChanneW 2014-08-27 09:27:58 +08:00
用 java 的那种编译后的程序
|
7
ibudao 2014-08-27 09:29:20 +08:00 1
@shuax 服务器被黑,不等于不安全。本来就没有绝对安全。个人觉得网络安全的本质是:被人破坏安全体系所花费的"成本" 大于 使用此安全策略所获得的"收益"。所以,做安全,只用尽可能的增加破解难度就可以了,不用保证任何情况下都不会被黑。楼主这个例子,可以在代码上做文章,如:不存储源码,并且不使用debug信息编译等,黑客即使拿到程序也很难反编译并查看到密钥信息。
|
8
ibudao 2014-08-27 09:32:05 +08:00
对于js代码,可以混淆,或者敏感信息是c写。
|
9
RIcter 2014-08-27 09:54:27 +08:00 via iPhone
如果想破解,总会破解出来的,放弃吧。
|
11
coinxu OP @RIcter 破解是需要时间的,有些时候与黑客斗拼得就是时间。就比如之前某个交易所的比特币被盗,但是因为每个比特币的私钥是采用不同方式的加密存储的,所以黑客想要完全盗取全部比特币,必须花费一定的时间来破解,同样网站站长发现后也可以第一时间从自己的备份信息中将比特币转移到安全地址。
这样将损失减小到最低程度。 |
12
ihacku 2014-08-27 10:09:54 +08:00 1
|
13
wangyongbo 2014-08-27 10:10:35 +08:00
请问,对称加密使用的密钥存储在哪里?
|
14
coinxu OP @wangyongbo 环境变量
|
16
wangyongbo 2014-08-27 10:27:16 +08:00
@coinxu 那既然可以黑到服务器,读到配置文件里面的client_id和client_secret,为什么不能读到环境变量呢?
|
17
jybox 2014-08-27 10:47:19 +08:00
这难道不是典型的应用非对称加密的场景么
|
18
Comdex 2014-08-27 11:13:37 +08:00
用golang做服务端
|
19
hjc4869 2014-08-27 11:40:46 +08:00
用Native Code做服务端程序。
|
20
VYSE 2014-08-27 13:19:09 +08:00
密钥放在KEYRING里啊,HACKER得拿到shell提权才能得到,再开个SELINUX
|
21
bolasblack 2014-08-27 16:27:33 +08:00
实话说既然提到了环境变量,那把 id 和 secret 放在环境变量里和把秘钥放在环境变量里然后解密配置文件有什么区别呢?我目前能想到的办法就是直接把这些敏感信息放在环境变量里然后程序在运行时读取,RoR 社区的大部分人的做法应该也是这个
我想这样子安全性应该也就差不多了 |
22
kfll 2014-08-27 18:54:59 +08:00 via Android
楼主出了个世纪难题啊
环境变量明显不满足你的需求 既然服务器已经被黑了,先认为是黑客拿到了一台linux服务器的root帐号吧。 你需要的可能是:代码全部预编译+全程https+把数据库交给aws以转移部分风险 不然随随便便都能获取你的敏感信息 至于黑客从内存中获取敏感信息的难度多大我就不知道了,这点不予置评。 |
23
wdlth 2014-08-28 17:45:47 +08:00
既然你的程序能使用那些什么加密后的东西,那么不法之徒经过某些步骤之后也可以,就像软件的破解一样。除非做成在线的,就像联网DRM一样……
|