coinxu
V2EX  ›  Node.js

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

  •  
  •   coinxu · Aug 27, 2014 · 5966 views
    This topic created in 4459 days ago, the information mentioned may be changed or developed.

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

    大概意思就是:

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

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

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

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

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

    我想这样子安全性应该也就差不多了
    kfll
    kfll
    Aug 27, 2014 via Android
    22
    楼主出了个世纪难题啊

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

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

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

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

    至于黑客从内存中获取敏感信息的难度多大我就不知道了,这点不予置评。
    wdlth
    wdlth
    Aug 28, 2014
    23
    既然你的程序能使用那些什么加密后的东西,那么不法之徒经过某些步骤之后也可以,就像软件的破解一样。除非做成在线的,就像联网DRM一样……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4356 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 07:30 · PVG 15:30 · LAX 23:30 · JFK 02:30
    ♥ Do have faith in what you're doing.