奇淫巧技之程序啓動後在進程列表中隱藏密碼等關鍵信息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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息