⚠️ 記事内に広告を含みます。

curlでbasic認証のユーザ名とパスワードを入力する方法

サイト動作の確認にはcurlコマンドが便利です。

デザインやレイアウトを確認する場合はブラウザから確認を行い、単純にサーバが動いているか?ページがあるか?というような確認にはcurlコマンドを使うほうがシンプルでわかりやすいです。

basic認証が使われているとユーザ名もパスワードも打てないのでcurlが使えない?と思うかもしれませんが、curlでもちゃんとbasic認証を突破できます。

basic認証のユーザ名とパスワードの入力の方法

開発環境でのサイト動作の確認にcurlを使うことが多いのですが、同時にbasic認証が設定されていてそのままcurlを行うと401 unauthorized エラーが返ってきます。

$ curl -IL example.com

HTTP/1.1 401 Unauthorized
Server: apache
Date: Mon, 17 Aug 2022 11:23:21 GMT
Content-Type: text/html
Content-Length: 172
Connection: keep-alive
WWW-Authenticate: Basic realm="basic auth area"

-u ユーザ名:パスワード

認証情報を-uオプションの後に入力してアクセスするとbasic認証を突破できます。

$ curl  -iL https://example.com -u 'user:passwd'


パスワードが履歴に残らないように対話式で入力も可能
$ curl  -iL https://example.com -u user
Enter host password for user 'user':

curlの-uオプションではユーザ:パスワードをbase64エンコードしてAuthorizationヘッダに追加しています。詳細は下記を確認してみてください。

curlの-uに入れたユーザとパスワードはサーバ側にどのようにして送信しているか?

これは-vオプションで詳細を表示させるとHTTPヘッダに入力されているのが分かります。

$ curl  -iL https://example.com -u 'user:passwd' -v

> GET /test-auth HTTP/1.1
> Host: example.com
> Authorization: Basic dXNlcjpwYXNzd2Q=
> User-Agent: curl/7.79.1

Hostヘッダにはドメイン、Authorizationヘッダに認証情報が入力されています。
ランダム文字列のようになっていますが、これはbase64という形式に変換されているからです。
実際に先ほどのアイパスをbase64でエンコードすると同じ文字列になります。

# echo -n "user:passwd" | base64
dXNlcjpwYXNzd2Q=
ヘッダでは特殊文字の使用ができないのでbase64形式に変換する決まりになっています

curlは-Hでヘッダを直接入力できるのでこちらでもbasic認証を突破できます

# curl -IL https://example.com/ -H 'Authorization: Basic dXNlcjpwYXNzd2Q='

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です