TSUBASAが属する個人プロジェクト「COFUS」内のBLOGコンテンツです。TSUBAS1992年生まれ、沖縄県育ち、現在大阪暮らし。フリーなフロントエンドエンジニアとしてコーディング案件をメインに行いながら、Web制作・Webサイト運営・ツール制作などの活動を行っています。皆さんもうご存知の通り、BASIC認証で入力するユーザー名とパスワードはBase64というエンコード方式で送信されますが、非SSL環境下だと暗号化される事が無いので基本的に平文での送信が行われます。非SSL環境下でのBASIC認証が危険だと言われる1番の理由は、ユーザー名とパスワードが平文で確認できちゃうという特性がある為です。パケット解析しちゃえば誰でも分かってしまうわけですね。言ってもどういう感じで確認できるの?何のアプリケーションを使うの?HTTPリクエストの流れを見てみたいそんなお声もあると思います。いうことで今回はBASIC認証を非SSL環境下で実装する事が如何に危険なのか、実際にパケット解析ソフトWiresharkを使って実感してみたいと思います。今回はあくまでパケット解析から見えてくる非SSL環境下でのBASIC認証の中身にフォーカスしてみたので技術的に危険な理由を詳しく述べる事はせず、パケット解析で見えるものに焦点を当てていこうと思います。WiresharkでBasic認証の流れを見てみる使用するWiresharkのバージョンは3.0.2macOS版です。今回は以下のディレクトリ構成をlocal上に作り試してみます。index.php認証のユーザー名とパスワードは適当に以下のようにしました。hgd7g3FGdijWiresharkはバージョン3.x系からlocalhostでもキャプチャ出来るLoopbackがキャプチャから選ぶことが出来るようになった様ですので、今回はそちらを使っていきます。ページが表示されたまでの流れが以下です。画像のinfoと書かれたカラムを見ると分かりますが、ざっくり動きの流れとしては以下になります。Requiredなので401を返す【リクエスト】Authorizationヘッダーにユーザー名とパスワードをセットしリクエスト(GET)【レスポンス】200を返す3番目でユーザー名とパスワードが合わなければ401レスポンスが返ってくるので再度入力画面に戻り入力を求められるといった具合になります。BASIC認証が非常に簡素な認証なのが流れからも見て分かりますよね。3番目のユーザー名とパスワードを入力する場面のリクエスト詳細を覗いてみます。冒頭で書きましたユーザー名とパスワードが平文に送信されるという点ですが、Authorizationという部分を見ると右側にBase64でエンコードされた文字列が見えます。その下Credentialsを見るとWireshark側で親切にもBase64をデコードされた文字列を見ることが出来ます。最初に設定したユーザー名とパスワードで間違いありませんね。puihfu4gl:hgd7g3FGdijちなみにターミナルでもBase64のデコードは以下の様にすることで可能です。実際に試してみるとこちらも同じ文字列が確認出来ました。-Dpuihfu4gl:hgd7g3FGdij見事に平文で送信されているのが確認できましたね。非SSL環境下でのBASIC認証実装が危険な理由が体験出来ました。パケット解析ソフトさえあればこういった感じで通信のバイパスから解析が出来てしまうので、第三者にBasic認証情報が漏れる事も容易に考えられます。基本的に非SSL環境下では用いない・用いられない物として認識しておきたいものです。ちなみにこのBasic認証とは別に似た認証方法としてDigest認証がありますが、こちらはMD5でハッシュ化するのでより安全に認証が行えます。Digest認証へ切り替えるのもありでしょう。Qiitaユーザー名とパスワードを平文で確認するだけならブラウザのDevツールなどでもHTTPリクエストを見ると確認することが出来ます。GithubTwitterChatworknoteFacebookWeb制作、コーディングのご依頼お待ちしております!。