質問: curlは、ps出力に表示されるパスワードをどのように保護しますか? 少し前に、コマンドライン引数としてcurlに与えられたユーザー名とパスワードがps出力に表示されないことに気付きました(もちろん、bashの履歴には表示される可能性があります)。同様に、/proc/pid/cmdlineにも表示されません。(ただし、組み合わせたユーザー名/パスワード引数の長さは導き出すことができます。)以下のデモ:[root@localhost ~]# nc -l 80 & [1] 3342 [root@localhost ~]# curl -u iamsam:samiam localhost & [2] 3343 [root@localhost ~]# get / http/1.1 authorization: basic awftc2ftonnhbwlhbq== user-agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 nss/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 host: localhost accept: */* [1]+ stopped nc -l 80 [root@localhost ~]# jobs [1]+ stopped nc -l 80 [2]- running curl -u iamsam:samiam localhost & [root@localhost ~]# ps -ef | grep curl root 3343 3258 0 22:37 pts/1 00:00:00 curl -u localhost root 3347 3258 0 22:38 pts/1 00:00:00 grep curl [root@localhost ~]# od -xa /proc/3343/cmdline 0000000 7563 6c72 2d00 0075 2020 2020 2020 2020 c u r l nul - u nul sp sp sp sp sp sp sp sp 0000020 2020 2020 0020 6f6c 6163 686c 736f 0074 sp sp sp sp sp nul l o c a l h o s t nul 0000040 [root@localhost ~]# この効果はどのようにして達成されますか? curlのソースコードのどこかにありますか? (私はそれがcurl機能ではなくps機能であると思いますか?それともある種のカーネル機能ですか?)また:これはバイナリ実行可能ファイルのソースコードの外部から実行できますか?例:シェルコマンドを使用して、おそらくルート権限と組み合わせて?言い換えると、/procまたはpsの出力(同じことだと思います)に渡された引数arbitraryシェルコマンド? (これに対する答えは「いいえ」だと思いますが、この余分な質問を含めることは価値があるようです。)
回答: 他の答えは一般的な方法で質問によく答えます。具体的には「」と答えるために、この効果はどのように達成されますか?それはどこかにありますかcurlのソースコードで? ": curlソースコードの引数解析セクション では、_-u_オプションは次のように処理されます。_ case 'u': /* user:password */ getstr(&config->userpwd, nextarg); cleanarg(nextarg); break; _そして cleanarg()関数が定義されています 以下のように:_void cleanarg(char *str) { #ifdef have_writable_argv /* now that getstr has copied the contents of nextarg, wipe the next * argument out so that the username:password isn't displayed in the * system process list */ if(str) { size_t len = strlen(str); memset(str, ' ', len); } #else (void)str; #endif } _したがって、他の回答で説明されているように、argvのusername:password引数がスペースで上書きされていることが明示的にわかります。