奇淫巧技之程序启动后在进程列表中隐藏密码等关键信息2

在上一篇总结中,在进程列表中隐藏密码是经过在main函数中作处理来隐藏的.linux

以下:服务器

 1 int _main(int argc, char* argv[], char** envp) {
 2 
 3     省略中间一些代码内容
 4 
 5     // hide password from ps output
 6 
 7     for (int i = 0; i < (argc - 1); ++i) {
 8 
 9         if (!strcmp(argv[i], "-p") || !strcmp(argv[i], "--password")) {
10 
11             char* arg = argv[i + 1];
12 
13             while (*arg) {
14 
15                 *arg++ = 'x';
16 
17             }
18 
19         }
20 
21     }

 

但是,上面的代码并非总能管用.为啥呢?由于main函数一进去,mongo并无立刻在进程列表里面把密码掩盖,而是先作了一些初始化操做,就是我在上面省略的代码部分.并发

由于中间省略的那部分代码也是要花费必定时间的,因此在比较极端的场景下,同时大并发执行mongo ip/db -u account -p password jsfile时候,是有可能被进程监控程序监控到带有明文密码的mongo进程的.ide

这个时候怎么解决呢?函数

mongo接受的服务器端js脚本中,也是能够执行登陆操做的,把登陆操做放到js中,这样,就能够用mongo ip jsfile方式来执行服务器端js了.spa

js的内容中须要添加:code

db = db.getSiblingDB('dbname')
var login_ret = db.auth('user','password')
if (1 == login_ret){
    //do something
}else{
    //print login failed message
}

若是帐号和密码是可变的,到时候能够经过将js脚本中user,password部份内容替换掉,就能够正常工做了.blog

总结:本篇讲的在进程列表中隐藏密码关键信息的方式是linux here document.进程

最后须要留意的是,若是直接执行mongo ip jsfile,else和if语句块的右花括号能够换一行,但若是jsfile是经过linux here document方式传入,则else和if语句块的右花括号必须是在同一行的.ip

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息