Basic認証は8文字まで?9文字以上のパスワードを設定する方法

意外と知られていない事実があります。

Basic認証はあまり考えずに設定すると、パスワードの先頭から8文字までしか認識されていない可能性があります。

パスワードの8文字までってどういう意味だ?

例えばですが次のようなパスワードを設定します。

abcd1234efgh5678

16文字のパスワードです。
このように8文字を超えるパスワードを設定しても実際には先頭から8文字目までの次の部分しか設定していないのと同じことになります。

abcd1234

せっかく長いパスワードを設定してもこれでは意味がないばかりか、自分の中では長いパスワードを設定しているつもりだったのに実はそうではなかった、というのはちょっと怖いですね。

なぜ9文字目以降が使われないのか

それはパスワードの暗号化方式によります。

暗号化には種類があるのですが、Basic認証で使われている一般的な暗号化方式がこのような仕様だからです。

具体的にはDESと呼ばれる方式です。

「apacheのbasic認証は・・・」って言われることもありますが、そうだからではなくパスワードファイル(.htpassword)を作るときの問題です。

9文字以上のパスワードを設定する方法

原因は暗号化方式なので、パスワードファイル(.htpassword)を作成するときに暗号化方式をデフォルトから適切なものに変えてやればOKです。

具体的には次のようになります。

画面に表示するだけの場合

htpasswd -nbm [ID] [パスワード]

※[ID]、[パスワード] は任意のものに。 [ と ] の記号は不要。

画面に表示されるだけなので、出てきた内容をコピーしてパスワードファイル(.htpassword)に貼り付けます。

指定した場所にファイルを作成する場合

htpasswd -nbm [ID] [パスワード] > /example/.htpassword

※[ID]、[パスワード] は任意のものに。 [ と ] の記号は不要。

※既にファイルが存在する場合は上書きになるので注意(元の内容は消えます)

指定したファイルに追記する場合

htpasswd -nbm [ID] [パスワード] >> /example/.htpassword

※[ID]、[パスワード] は任意のものに。 [ と ] の記号は不要。

作成する場合の > が >> に変わるだけです。
追記したファイルを開くと、空白行ができてることがあります。気になるなら削除してOKですが、最終行の空行だけは必要です。

長いパスワードに対応しているか見分ける方法

.htpassword ファイルを見ただけで見分けられるかな、と思うところですが、難しいです。

誰にでも出来て確実な方法でいうと実際にやってみることです。

1.Basic認証を設定しているページにアクセスします。

2.パスワードは先頭8文字までだけを入力し、OKを押します。

ログインできたら9文字以上に対応していないパスワードです。

上記の方法で、.htpassword の内容を作り直しましょう。

※そもそもパスワードに9文字以上設定していないページでは無意味です。

Basic認証発行サービスのようなWEBツールをご利用の方は9文字以上に対応していない可能性が高いのでご注意ください。

導入サポート・運用サポート

ということで宣伝です。

弊社ではPHP・MySQL・javascriptを使ったWebサイトを得意としています。
これらは2005年頃から触り続けてきていることもあり得意中の得意です。

1日で完了する簡単なことから、半年・1年規模のものまで幅広く承っています。

特にプログラム開発が必要になるようなカスタマイズは遠慮なくご相談ください。

フロントの見た目に関わるところはデザイン会社が担当、裏方の技術部分を弊社が担当するケースもあり柔軟に対応することができます。

メールやSNSなどのメッセージで簡単に連絡いただいたあとで、電話していただけると確実です。(お問い合わせ