私は、(1)最も安全で(2)ユーザーにbashシェルプロンプトでパスワードを入力させ、そのパスワードをプログラムの標準入力の一部にする最も簡単な方法を探しています。
これは、stdinがどのように見える必要があるかです:{"username":"myname","password":"<my-password>"}
、<my-password>
シェルプロンプトに入力されたものはどこですか。プログラムstdinを制御できる場合は、パスワードの入力を安全に要求して配置するようにプログラムを変更できますが、ダウンストリームは標準の汎用コマンドです。
私は、以下を使用するアプローチを検討し、拒否しました。
...$PASSWORD...
)への引数へのシェル変数の補間:パスワードは引き続き「ps」を介してすべてのユーザーに表示されます私は現在の解決策を以下の答えとして挙げますが、誰かがそれを思いついた場合、喜んでより良い答えを選択します。もっと簡単なものがあるべきだと思っているか、誰かが私が見逃したセキュリティ上の懸念を見ているかもしれません。
bash
かzsh
:
unset -v password # make sure it's not exported
set +o allexport # make sure variables are not automatically exported
IFS= read -rs password < /dev/tty &&
printf '{"username":"myname","password":"%s"}\n' "$password" | cmd
がないIFS=
とread
、入力したパスワードから先頭と末尾の空白が削除されます。
がないと-r
、円記号を引用文字として処理します。
ターミナルからのみ読み取るようにします。
echo
確実に使用することはできません。ではbash
とzsh
、printf
そのコマンドラインの出力に表示されないように、組み込みされますps
。
ではbash
、引用する必要があります。$password
そうしないと、split + glob演算子が適用されます。
ただし、その文字列をJSONとしてエンコードする必要があるため、これはまだ間違っています。たとえば、少なくとも二重引用符と円記号は問題になります。おそらく、これらの文字のエンコードについて心配する必要があります。あなたのプログラムはUTF-8文字列を期待していますか?あなたの端末は何を送信しますか?
プロンプト文字列を追加するには、次のようにしますzsh
。
IFS= read -rs 'password?Please enter a password: '
とbash
:
IFS= read -rsp 'Please enter a password: ' password
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加