「curl -u username:password http://example.com」は安全ですか?


30

あるcurl -u username:password http://example.com安全な?

そうでない場合は、誰かがパスワードを取得する方法について簡単に説明できますか?


6
ターミナルでそれを使用している場合、両方の資格情報がbashの履歴に保存されていることを覚えていますか?
フランシスコタピア

15
別のユーザーps -efが実行中のプロセスを確認するために使用する可能性があるため、このようなコマンドは安全ではありません。あなたの場合はcurl -u username:password http://example.com、リストに表示され、目的地、ユーザー名とパスワードが危険にさらされています。
ランバート

ここでは質問がトピックになっていますが、情報セキュリティStackExchange
IQAndreas

回答:


54

HTTPプロトコルがパスワードをクリアテキストで送信する基本認証がcURLのデフォルトであるため、安全ではありません。username:password文字列を指定すると、HTTPヘッダーでBASE64文字列に変換されます。

GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

HTTPトラフィックを傍受できる人(プロバイダー、あなたと同じワイヤレスAPにアクセスする人など)は、オンラインのBASE64コンバーターを使用するだけでパスワードを回復できます。

HTTPSプロトコルは、このヘッダーが送信される前に暗号化された接続を確立することで状況を改善し、パスワードの漏洩を防ぎます。ただし、これは、不明な証明書の確認、セキュリティ例外の承認などを求められたときにユーザーが注意を払う場合にのみ適用されます。

同じマシン上の他のユーザーがコマンド引数を利用できる場合があることに注意してください。たとえばps -ef、/ procファイルシステム、bash履歴、およびターミナルログ(@Lambertのコメントに感謝します)。一部のプラットフォームのcURLはパスワードを非表示にしようとするため、たとえばps -ef、パスワードの代わりに空白スペースが表示される可能性があります。ただし、cURL faqで説明したように、パスワードをコマンドライン引数として渡すのではなく、cURLに直接パスワードを要求させる方が良いです。


4
curlが独自のargvを正常に上書きしてデータを非表示にするプラットフォームを使用している場合でもps、そのコンテンツが脆弱な上書きが実行される前に起動する期間があります。
チャールズダフィー

ダイジェスト認証はどうですか?curlはデフォルトでそれを使用しませんか?
rr-

2
@rrダイジェスト認証は中間者攻撃を防ぐことができないため、わずかに優れています。したがって、HTTPSを使用することをお勧めします。
ドミトリーグリゴリエフ

1
@rr StartSSLがほとんどのブラウザで信頼されていないことをどのように主張しますか?多くのWindows 95またはFirefox 1.5ユーザーを期待していますか?
ハーゲンフォンアイゼン


24

安全ではありません。コマンドラインパラメーターはすべてのユーザーに表示されます。


4
@Dmitry Grigoryevの回答とマージすると、最も正確な回答になる可能性があります。
フランシスコタピア

1
ええ、私が認めなければならない問題の大部分を完全に逃しました。
ドミトリーグリゴリエフ

コマンドは、ユーザーのみが読み取り可能なスクリプトの一部である可能性があります
ピート

2
実行プログラムの@Peteコマンドライン(スクリプトから起動された場合でも、端末で起動された場合でも)は通常、psコマンドと/procファイルシステムを通じてすべてのユーザーに表示されます。コマンドがすぐに終了する場合、リスクは軽減されますが、まだ存在しています。
RBerteig

2
@Pete Answersは排他的なものではなく、互いに補完し合うものです。したがって、2番目の答えで最初の脅威を説明しなくてもかまいません。むしろ、繰り返すのは冗長です。そして、あらゆる場合に当てはまるわけではないため、ステートメントをfalseとは呼びません。
ドミトリーグリゴリエフ

1

これは、-netrc-fileパラメーターを使用することにより、より安全な方法で実行できます。

  1. 600アクセス許可でファイルを作成します

例:vi / root / my-file

マシンexample.com

ログインUSERNAME

パスワードPASSWORD

ファイルを保存して閉じます

  1. 以下を使用して、ユーザー名とパスワードでURLにアクセスします。

curl --netrc-file / root / my-file http://example.com

  1. 完了

0

HTTPスキームを使用する場合は安全ではありません。安全にするには、HTTPSを使用する必要があります。

コマンド履歴にパスワードが表示されないようにするには、ユーザー名のみを指定します。コマンドで指定されていない場合、Curlはパスワードを要求します。


HTTPSが利用できない場合、有用な回答ではありません。cURLは「クライアント」です。
mckenzm

0

短い答えはノー...しかし....

サーバー側のオプションがない場合は、セキュリティを強化できます。

  1. これがローカルイントラネットの場合は、ブロードキャストドメインを分離し、WiFiや無線を使用しないでください。
  2. Shameerが言うように、.netrcファイルを使用して、コードから値を除外します。
  3. メモリが安全であると信頼できる場合は、環境変数を使用してください。$ PSWD。
  4. これが自動化の場合、ルートのcrontabから実行します。
  5. ...コンテナ内。
  6. ...暗号化されたディスクを持つVMから。

これらのいずれも、HTTPを使用するブラウザほど安全ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.