『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のセキュリティー警告を回避できることについてもご覧ください
[security]警告を回避するユーザーフレンドリネスとは
普通に考えると、パスワードを認証後のHTTPレスポンスヘッダ(*1の部分)で Location: http://www.exmaple.com/login...
=?utf-8?B?ZGVsLmljaW8udXMvcG9wdWxhcg==?=
links for 2006-06-05
solo.design 跳ねるアイコン (tags: blog…
IEで「セキュリティーで保護されていないページに移動しようとしています」が出てしまう問題で、何か解決方法は無いものかとGoogleで「http https 警告」で検索して、このページを見つけました。
正にそのままの解決策です。
おかげで解決できました。ありがとうございました。