web-dev-qa-db-ja.com

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

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

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

30
JDiMatteo

CURL はデフォルトでHTTPプロトコルがクリアテキストでパスワードを送信する基本認証 に設定されているため、安全ではありません。 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で直接パスワードの入力を求める方が適切です。

54

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

24
Tronic

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

  1. 600権限でファイルを作成します

例:vi/root/my-file

マシンexample.com

ログインUSERNAME

パスワードPASSWORD

ファイルを保存して閉じる

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

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

  1. 完了
1
Shameer

HTTPスキームを使用する場合は安全ではありません。安全にするには、HTTPSを使用してください。

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

0
Mohnish

簡単な答えはノーです...しかし……。

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

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

これらのどれもが、HTTPを使用するブラウザよりも安全性が劣るものではありません。

0
mckenzm