Webとメールに特化したクラウド型レンタルサーバー。php5.3 MySQL5.1 root権限 ssh対応、複数ドメイン。色々対応で月額5,250円!!

7月 25

サーバ担当のもしかするとKです。

今回はしばしば利用されるApacheのBasic認証(auth_basic_module)と、もう少し頑張るDigest認証(auth_digest_module)について数回に分けて書いてみようと思います。今回はBasic認証についてです。

Basic認証

Apacheの.htaccessで認証しますと聞くと、一番最初に思いつくのが以下の様な.htaccessを書くBasic認証と言われているものじゃないかと思います。

$ cat .htaccess
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /tmp/.htpasswd
Require user test_user

試しにtelnetでBasic認証されるコンテンツ領域にアクセスしてみます。

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /k_test_tmp/index.html HTTP/1.0
host: hoge.hoge.jp:80 

HTTP/1.1 401 Authorization Required
Date: Tue, 24 Jul 2007 04:33:43 GMT
Server: Apache
WWW-Authenticate: Basic realm="By Invitation Only"
Content-Length: 463
Connection: close
Content-Type: text/html; charset=iso-8859-1
:省略:
Connection closed by foreign host.

この接続ではパスワード情報を入力していないので、上の省略部分では401 Authorization Requiredで怒られているのですがそれは置いておいて、ここでの注目部分はWWW-Authenticate:の部分。文中にBasicという文字が確認できます。これはウェブサーバからBasic認証を要求しているという合図みたいなものです。

これに対して認証させてみたいと思います。

Basic認証はAuthorization: Basic <MIME base64でエンコードした’ユーザ名:パスワード>の指定で行うことができます。たとえば、ユーザ名がtest_user、パスワードがtest_passの場合はこんな感じに。

$ echo -n 'test_user:test_pass' | nkf -MB ; printf 'n'
dGVzdF91c2VyOnRlc3RfcGFzcw==

これを使って実際にアクセスしてみます。

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /k_test_tmp/index.html HTTP/1.0
host: hoge.hoge.jp:80
Authorization: Basic dGVzdF91c2VyOnRlc3RfcGFzcw== 

HTTP/1.1 200 OK
Date: Tue, 24 Jul 2007 06:23:49 GMT
Server: Apache
Last-Modified: Tue, 24 Jul 2007 04:29:40 GMT
ETag: "83b8f-b-d7797500"
Accept-Ranges: bytes
Content-Length: 11
Connection: close
Content-Type: text/html; charset=none 

test page!
Connection closed by foreign host.

エラーも出力されず、テキトーに作った感がすごく漂ってるindex.htmlの中身が確認できました。

しかし、ここからが本エントリーの肝です。もう気づいている人がいると思いますがパスワードはMIME base64でエンコードされた結果です。つまりデコードすると簡単に内容が分かります。

$ echo -n 'dGVzdF91c2VyOnRlc3RfcGFzcw==' | nkf -mB ; printf 'n'
test_user:test_pass

もし、パケットを盗み見られていてこのことを知っているのであれば、パスワードが盗まれてしまう可能性が非常に高いということが想像できると思います。お手軽に設定できる認証なのですが、盗聴されるととても弱いことを覚えておくと良いのではないでしょうか。

次回はDigest認証について書いてみたいと思います。

投稿者: K
Trackback URL:

Leave a Reply

Get Adobe Flash playerPlugin by wpburn.com wordpress themes