奇淫巧技之程序启动后在进程列表中隐藏密码等关键信息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语句块的右花括号必须是在同一行的.

时间: 2024-08-07 17:29:28

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

[asp.net mvc 奇淫巧技] 04 - 你真的会用Action的模型绑定吗?

在QQ群或者一些程序的交流平台,经常会有人问:我怎么传一个数组在Action中接收.我传的数组为什么Action的model中接收不到.或者我在ajax的data中设置了一些数组,为什么后台还是接收不了.还有一些怎么传送一个复杂的对象或者Action怎么接收一个复杂的对象等等这些问题.或者有些人遇到复杂的对象或者数组直接就传送个json字符串,然后在Action中把json字符串转成model对象,当然这也是一种做法,但也许不是最优的做法. 一.需求 按照如图的数据格式,传入到Action,用一

[asp.net mvc 奇淫巧技] 06 - 也许你的项目同一个用户的请求都是同步的

一.感慨 很久前看到一篇博客中有句话大致的意思是:“asp.net 程序性能低下的主要原因是开发人员技术参差不齐”,当时看到这句话不以为然,然而时间过的越久接触的.net 开发人员越多就越认同这句话:特别最近发现非常一个成熟的项目中有些问题非常非常影响性能,最终影响的是用户体验,借此给大家分享一下关于asp.net中一个小小的点,但对项目有很大的性能提升:以前觉得自己接触的项目少小,然后接触的项目越多,越大就会越发现,同样的问题依旧存在: 二.先从最简单的asp.net mvc例子说起 1.Co

【C#冷知识系列】(一)那些你知道或者不知道的奇淫巧技

引子 正如我在个人介绍中所写,我是一个仍然坚持.NET的头铁高级软件工程师,研究C#,.NET已经六年多,一直坚持认为自己的能力不足以教授别人,所以一直没有想法写博客.工作几年,内容涵盖了.NET框架下的各种软件的开发,WPF,WinForm,WebForm,ASP.NET,MVC5,开发的软件几乎涵盖了.NET家族的各个成员.让我下定决心写一系列C#高级开发文章的原因并不是因为某天早上起床突如其来的兴致勃勃的决定要将自己这些年积累的经验分享给大家,而是是因为公司前端的一句"快脱坑吧,你们做WP

C++奇淫技巧,程序员为啥天天学继承与派生,真的有这么难吗

继承与派生 1.1继承与派生的概念 在C++中,可重用性是通过继承这一机制来实现的.所谓继承,就是在一个已存在的类的基础上建立一个新的类.已存在的类称为基类,新建立的类成为派生类.(与对象的复制做区别)一个新类从已有的类那里获得其已有特性,这种现象称为类的继承. C++奇淫技巧,程序员为啥天天学继承与派生,真的有这么难吗派生类继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或调整.创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交

[javascript 实践篇]——那些你不知道的“奇淫巧技”

1. 空(null, undefined)验证 刚开始,我是比较蠢的验证(我还真是这样子验证的) if (variable1 !== null || variable1 !== undefined || variable1 !== '') { let variable2 = variable1; } 大哥教会了我这样子验证,你会惊叹一下的 let variable2 = variable1 || ''; 如果你不信,在谷歌浏览器开发者面板的控制台下试试! //值为null的例子 let vari

源码解析中看到的奇淫巧技

源码解析中看到的奇淫巧技 一. 数组重置 let arr = [123,123] arr.length // 2 arr.length = 0 arr // [] 当我们给数组的length 属性设置成 0 .那么数组就会被重置为空. (很神奇有木有 二. 数据类型判断 1. 判断是否为 undefined let isUndef = function(v) { return v === undefined || v === null } 2. 判断是否 不为空 let isDef = func

关于mysql8启动后又停止(windows10系统),忘记密码以及密码过期等坑解决办法总结!

一 我遇到的问题 1 mysql连接不了,mysql服务启动后又马上关闭 2 忘记密码或者重装服务后提示安装的随机密码过期 一个一个来,先看第一个: 1 出现这个情况很大原因是mysql安装目录有多余的文件,比如my.ini以及其他无关文件, 我之前用的好好的,这次突然不能用就是这个原因,把my.ini从mysql根目录移除,不要在根目录放任何无关文件 2 这里贴一个快速解决办法: 出自这篇博客: 主要是这个命令: mysqld --init-file=c:\mysql\ResetPWD.txt

(转)javascript 奇淫巧技44招

1.首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. 2.使用===取代== ==和!=操作符会在需要的情况下自动转换数据类型.但===和!==不会,它们会同时比较值和数据类型,这也使得它们要比==和!=快. [10] === 10 // is false [10] == 10 // is true '10' == 10 // is true '10' === 10 // is false [] == 0 // is true

web.config的奇淫巧技

<connectionStrings configSource="db.config"/> 外部文件db.config: <connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-WebApplication1-20140304225906;Inte