Node.js中使用execFile()传递用户输入的密码是否安全?
Node.js execFile传递密码的安全性问题
直接把密码当命令行参数的风险
别这么干——哪怕用的是execFile(不经过shell),Linux下还是会有严重的密码泄露风险:
- 任何能运行
ps命令的用户,都能看到进程的完整命令行参数,明文密码直接暴露; - 系统的
/proc/<pid>/cmdline文件会记录进程的命令行参数,只要进程在运行,这个文件默认对所有用户可读,谁都能查到密码; - 虽然不会进shell历史,但上面这两个问题已经足够致命。
用环境变量传递密码更安全吗?
是的,比命令行参数安全得多:
- 进程的环境变量存在
/proc/<pid>/environ里,默认只有进程所有者和root能读,普通用户看不到; - 环境变量不会出现在
ps的常规输出里,减少了被无意瞥见的可能; - 但要注意:你调用的
somecommand得支持从环境变量读取密码才行——比如很多工具会认XXX_PASSWORD这类环境变量,要是工具只认命令行参数,那环境变量的方法就没用。
更稳妥的方案
如果可以的话,优先用这两种方式:
- 通过标准输入传密码:要是目标命令支持从stdin读取密码,用
execFile的stdin选项把密码传进去,完全不会出现在任何进程相关的公开信息里; - 加密配置文件:把密码加密存在本地文件,程序运行时解密读取,避免明文在内存外传递。
内容的提问来源于stack exchange,提问作者user1853417
相关产品推荐
相关产品推荐

