次のコマンドがあります。
python -c 'import crypt; print(crypt.crypt("$Password", crypt.mksalt(crypt.METHOD_SHA512)))'
$Password
シェル変数はどこにありますか?これをリテラルとして扱うのではなく、変数に正しく拡張するにはどうすればよいですか?
答え1
これはコード注入の脆弱性なので、実行しないでください。また、パスワードが出力に表示されて公開ps
され、時には一部の監査ログに記録されるため、コマンドの引数としてパスワードを渡さないでください。
通常、環境変数を使用する方が良いです。
PASSWORD="$Password" python3 -c 'import os, crypt
print(crypt.crypt(os.getenv("PASSWORD"), crypt.mksalt(crypt.METHOD_SHA512)))'
VAR=value cmd
(ここでは環境変数のリバース構文が使用されるため、export VAR
環境変数はそのコマンド呼び出しにのみ渡されます。)
答え2
いいえ。
python -c 'import sys; import crypt; print(crypt.crypt(sys.argv[1], crypt.mksalt(crypt.METHOD_SHA512)))' "$Password"