HTTPSの認証ページから認証後、HTTPのページへセキュリティーの警告無しにリダイレクトする方法

SSLを入力画面から使用しないのはそろそろ「脆弱性」と判断してしまってよいころかも』という記事があるように、 パスワードを送信する段階で初めてSSLを使うはなく(パスワード入力フォームはHTTPで送信され、そのページのformタグのaction属性がhttpsになってる状態)、その前の段階でパスワード入力フォームが改竄されていないことを証明するために、パスワード入力フォームもHTTPSなページで表示することが望ましい状況になってきました。

で、そんなような仕組みを作った後で考えないといけないことは、認証後どうやってHTTPに戻すかと言うこと。つまり、すべてのページでHTTPSを使うのはサーバーに負荷がかかり現実的ではないので、認証する部分だけHTTPSで改竄や盗聴を防ぎ、その他のページはHTTPで済まそうという事です。図にするとこんな感じ。

  クライアント 経路 サーバー 経路 クライアント
ステージ1 ログインフォームへのリンクをクリック HTTPS ログインフォームHTMLを返す HTTPS ログインフォームを得る
ステージ2 ログインフォーム送信 HTTPS ログイン処理 HTTPS(*1) ログイン後の画面

普通に考えると、パスワードを認証後のHTTPレスポンスヘッダ(*1の部分)で
Location: http://www.exmaple.com/logined.html
とかすればいいんじゃないの?と思うのですが、そうするとIEで「セキュリティーで保護されていないページに移動しようとしています」というような警告ダイアログが出てきてしまいます。

そんな警告ダイアログが出るのはユーザーフレンドリーじゃないので、それを防ぐ方法。

解決方法は簡単で、レスポンスヘッダで対応できないならレスポンスボディーで対処すればOK(Yahoo!なんかもこの方法を使っているようです)。たとえば、認証後、*1のところで以下のようなHTMLを返してあげれば、ブラウザがHTTPなページにリダイレクトしてくれるわけです。

<html>
<head>
<meta http-equiv="refresh" content="0; url=http://www.exmaple.com/logined.html">
<script type="text/javascript">
<!--
location.href = "http://www.exmaple.com/logined.html";
//-->
</script>
</head>
<body>
<p>ログインが完了しました。<a href="http://www.exmaple.com/logined.html">続けるにはここをクリックしてください</a>。</p>
</body>
</html>

追記 2006年4月26日

セキュリティー警告を回避することをフレンドリーというのはいかがなものか、というトラックバックなどもいただきましたので、あわせてHTTPSからHTTPのページに移動する際にIEのセキュリティー警告を回避できることについてもご覧ください

4 thoughts on “HTTPSの認証ページから認証後、HTTPのページへセキュリティーの警告無しにリダイレクトする方法”

  1. IEで「セキュリティーで保護されていないページに移動しようとしています」が出てしまう問題で、何か解決方法は無いものかとGoogleで「http https 警告」で検索して、このページを見つけました。
    正にそのままの解決策です。
    おかげで解決できました。ありがとうございました。

Leave a Reply

Your email address will not be published. Required fields are marked *