GitHub APIに対して行うことができるリクエストの例を以下に示します。
curl 'https://api.github.com/authorizations' --user "USERNAME"
これにより、アカウントのパスワードの入力を求められ、続行します。
Enter Host password for user 'USERNAME':
プロンプトを表示したくない場合は、ユーザー名と同時にパスワードを指定できます。
curl 'https://api.github.com/authorizations' --user "USERNAME:PASSWORD"
しかし、この方法は安全性が低いですか? curl
はすべてのデータを一度に送信しますか、それとも最初に安全な接続をセットアップしてからUSERNAME
とPASSWORD
を送信しますか?
接続に関しては違いはありません。TLSが最初にネゴシエートされ、HTTP要求はTLSによって保護されます。
ローカルでは、これは安全性が低い可能性があります。
~/.bash_history
)コマンドの一部として。 注:これは、コマンドを実行する前にコマンドの前にスペースを追加することで回避できます(変数にignorespace
の設定がある場合) HISTCONTROL
)。ps
、top
などで、または/proc/$pid/cmdline
、コマンドが実行されている限り。しかし、この方法は安全性が低いですか?
いいえ、https
を使用する場合はそうではありません。 HTTPS
を使用すると、トランザクション全体が暗号化されます。しかし、@ Esaが言及したように、ローカルで安全ではないため、コマンドの前にspace
を追加しないで、コマンドがコマンド履歴に含まれないようにすることができます。他のユーザーにps
コマンドを公開することを心配している場合は、/proc
を強化することで解決できます。リンクに従って hidepid を有効にします。
curl
はすべてのデータを一度に送信しますか、それとも最初に安全な接続を設定してからUSERNAME
とPASSWORD
を送信しますか?
いいえcurl
が一度にすべてのデータを送信するわけではありません。他のSSL/TLS
接続と同様に、curl
はデータを渡す前にSSL
ハンドシェイクを開始します。
次のように、tcpdump
、tshark
、またはWireshark
を使用してデータがどのように転送されるかを検査できます(tcpdump/tshark
を実行した後、curl
コマンドを実行します)
[〜#〜] tcpdump [〜#〜]
[root@arif]# tcpdump -i eth0 -n src Host 192.168.1.1 and dst Host 192.168.1.2 and port 443 -XX
どこ、
-i
:この場合はeth0
である特定のインターフェースでリッスンしますsrc Host
:ソースip
アドレスの指定dst Host
:宛先ip
アドレスの指定port
:SSL
接続のデフォルトであるポート443
を指定します。必要に応じて変更できます。XX
:ヘッダー、パケットコンテンツ、リンクレベルヘッダーをHEXおよびASCIIで表示します。いくつかのパケットの後、gibberish
の内容が表示され始めます。次のコマンドを使用して、パケットからパスワードをgrep
することもできます。
[root@arif]# tcpdump -li eth0 -n src Host 192.168.1.1 and dst Host 192.168.1.2 and port 443 -XX | grep 'password'
パスワードが表示された場合、送信前にパスワードが暗号化されていません。それ以外の場合は、大丈夫です。
[〜#〜] tshark [〜#〜]
[root@arif]# tshark -O tls "ip src 192.168.1.1 and ip dst 192.168.1.2" -x
どこ、
-O
:プロトコルについて。-x
:パケットの内容を確認します。上記のコマンドでもパスワードをgrep
できます。
ローカルユーザーから保護する最善の方法は、「。netrc」ファイルを使用することです。 curl
のmanページには、その使用方法の詳細が記載されているはずです。