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


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

    如下:

     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进程的.

    这个时候怎么解决呢?

    mongo接受的服务器端js脚本中,也是可以执行登录操作的,把登录操作放到js中,这样,就可以用mongo ip jsfile方式来执行服务器端js了.

    js的内容中需要添加:

    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部分内容替换掉,就可以正常工作了.

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

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

  • 相关阅读:
    bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)
    bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)
    bzoj 2393 Cirno的完美算数教室(容斥原理+搜索)
    c3p0 连接池配置
    Hibernate连接池断开自动重连
    Oracle ASM注意事项
    JAVA如何获得数据库的字段及字段类型
    在引入的css或者js文件后面加参数的作用
    JAVA注解
    Linux软连接和硬链接
  • 原文地址:https://www.cnblogs.com/leipei2352/p/6160873.html
Copyright © 2020-2023  润新知