V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coinxu
V2EX  ›  Node.js

node.js 服务端代码安全问题

  •  
  •   coinxu · 2014-08-27 08:47:32 +08:00 · 4768 次点击
    这是一个创建于 3749 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原问题地址在这里:node-js-server-code-security-issue

    大概意思就是:

    我的服务器需要的一些敏感信息都会加密存储到google drive上,这样不至于服务器被黑后敏感信息泄露。

    但是google drive的话client_id和client_secret什么的都写在配置文件里面,服务器被黑了黑客一花点时间读代码就可以自己去从google drive上取这些敏感信息了。

    所以我初步思路是在配置文件中使用对称加密对这些配置信息进行加密存储,然后程序启动时在环境变量中设置密钥,这样密钥就不会被暴露了。

    这个方法总感觉不靠谱,有点野路子,不知道有没有一些标准的解决方案。

    23 条回复    2014-08-28 17:45:47 +08:00
    TangMonk
        1
    TangMonk  
       2014-08-27 08:51:56 +08:00
    喜欢玩火女?
    coinxu
        2
    coinxu  
    OP
       2014-08-27 08:55:25 +08:00
    @TangMonk 严肃点,问答呢。
    shuax
        3
    shuax  
       2014-08-27 09:02:12 +08:00
    服务器都能被黑,还有什么安全可以讨论的。
    coinxu
        4
    coinxu  
    OP
       2014-08-27 09:07:46 +08:00
    @shuax 服务器被黑不代表所有数据就一定得完蛋好吧,尽可能减小损失。
    ptyfork
        5
    ptyfork  
       2014-08-27 09:10:46 +08:00   ❤️ 1
    这跟node.js有一丁点关系?
    ChanneW
        6
    ChanneW  
       2014-08-27 09:27:58 +08:00
    用 java 的那种编译后的程序
    ibudao
        7
    ibudao  
       2014-08-27 09:29:20 +08:00   ❤️ 1
    @shuax 服务器被黑,不等于不安全。本来就没有绝对安全。个人觉得网络安全的本质是:被人破坏安全体系所花费的"成本" 大于 使用此安全策略所获得的"收益"。所以,做安全,只用尽可能的增加破解难度就可以了,不用保证任何情况下都不会被黑。楼主这个例子,可以在代码上做文章,如:不存储源码,并且不使用debug信息编译等,黑客即使拿到程序也很难反编译并查看到密钥信息。
    ibudao
        8
    ibudao  
       2014-08-27 09:32:05 +08:00
    对于js代码,可以混淆,或者敏感信息是c写。
    RIcter
        9
    RIcter  
       2014-08-27 09:54:27 +08:00 via iPhone
    如果想破解,总会破解出来的,放弃吧。
    coinxu
        10
    coinxu  
    OP
       2014-08-27 09:59:30 +08:00
    @ibudao 是的,阁下的思想靠谱。看来楼上几位都得了解下比特币,对提高安全意识很有帮助。
    coinxu
        11
    coinxu  
    OP
       2014-08-27 10:06:21 +08:00
    @RIcter 破解是需要时间的,有些时候与黑客斗拼得就是时间。就比如之前某个交易所的比特币被盗,但是因为每个比特币的私钥是采用不同方式的加密存储的,所以黑客想要完全盗取全部比特币,必须花费一定的时间来破解,同样网站站长发现后也可以第一时间从自己的备份信息中将比特币转移到安全地址。
    这样将损失减小到最低程度。
    ihacku
        12
    ihacku  
       2014-08-27 10:09:54 +08:00   ❤️ 1
    wangyongbo
        13
    wangyongbo  
       2014-08-27 10:10:35 +08:00
    请问,对称加密使用的密钥存储在哪里?
    coinxu
        14
    coinxu  
    OP
       2014-08-27 10:12:43 +08:00
    @wangyongbo 环境变量
    coinxu
        15
    coinxu  
    OP
       2014-08-27 10:14:06 +08:00
    @ihacku 感谢,我先了解下。
    wangyongbo
        16
    wangyongbo  
       2014-08-27 10:27:16 +08:00
    @coinxu 那既然可以黑到服务器,读到配置文件里面的client_id和client_secret,为什么不能读到环境变量呢?
    jybox
        17
    jybox  
       2014-08-27 10:47:19 +08:00
    这难道不是典型的应用非对称加密的场景么
    Comdex
        18
    Comdex  
       2014-08-27 11:13:37 +08:00
    用golang做服务端
    hjc4869
        19
    hjc4869  
       2014-08-27 11:40:46 +08:00
    用Native Code做服务端程序。
    VYSE
        20
    VYSE  
       2014-08-27 13:19:09 +08:00
    密钥放在KEYRING里啊,HACKER得拿到shell提权才能得到,再开个SELINUX
    bolasblack
        21
    bolasblack  
       2014-08-27 16:27:33 +08:00
    实话说既然提到了环境变量,那把 id 和 secret 放在环境变量里和把秘钥放在环境变量里然后解密配置文件有什么区别呢?我目前能想到的办法就是直接把这些敏感信息放在环境变量里然后程序在运行时读取,RoR 社区的大部分人的做法应该也是这个

    我想这样子安全性应该也就差不多了
    kfll
        22
    kfll  
       2014-08-27 18:54:59 +08:00 via Android
    楼主出了个世纪难题啊

    环境变量明显不满足你的需求

    既然服务器已经被黑了,先认为是黑客拿到了一台linux服务器的root帐号吧。

    你需要的可能是:代码全部预编译+全程https+把数据库交给aws以转移部分风险

    不然随随便便都能获取你的敏感信息

    至于黑客从内存中获取敏感信息的难度多大我就不知道了,这点不予置评。
    wdlth
        23
    wdlth  
       2014-08-28 17:45:47 +08:00
    既然你的程序能使用那些什么加密后的东西,那么不法之徒经过某些步骤之后也可以,就像软件的破解一样。除非做成在线的,就像联网DRM一样……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2258 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:37 · PVG 09:37 · LAX 17:37 · JFK 20:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.