セッションとHTTPとHTTPSの関係

ログインの仕組みとセッション

サイトへのログインを作るときにはセッションを利用するのが
一般的です。
認証できたらセッションにIDなんかを書き込んでおいて、
アクセスされる度にセッションの中に値が存在するかどうか
チェックしたりするわけです。


で、ログインは個人情報を通信するわけだから、
HTTPではなくてHTTPS通信でやりましょう、となる訳なんですが、
ログインしたと思ったら、ログインしていない判定をされてしまう…。

これはなぜなのか、という話です。

セッションの連続性

セッション管理は通常CookieにセッションIDを渡して、
サーバに問い合わせをするとき、一緒にCookieの情報も渡して、
そのセッションIDからセッションを特定し、値を取り出したり書いたりするわけですが、


どうも最近のブラウザはHTTPSで受け取ったCookieはHTTP通信に
なった時には渡さないようです。
つまりHTTPS内でセッションIDを更新してしまうと、HTTP通信に
戻ったときにセッションが切れたと判定されてしまう。
だからHTTPS内でセッションに値を書き込んで、セッションIDを
書き換えたりすると、ログインしていないことになってしまいます。


そもそもセッションのチェックをするときに、IDの他にURLを
みてセッションを切るか切らないかというオプションがあり、
それが有効な場合はURLが変わってしまうわけですから、
連続したセッションではないということになります。

どうしたらいいの?

ではどうするか。
そもそもセッションIDを書き換えるのはセッションハイジャック
のためです。
なので書き換えはできるだけしたいわけですが、
二種類のセッションIDを利用してやればセッションハイジャックのリスクを軽減することができるはずです。

  • ユーザ認証フラグを格納するためのセッション
  • ユーザ情報を格納するためのセッション

入力フォーム系では、どうしても情報のやりとりが必要になるので、
それらを格納しておくためのセッションを、ログイン情報とは別に
用意してやります。
そしてそれらの情報の処理は、セッションIDを変えながらHTTPS内で処理をしてしまって、処理が終わったら破棄する。
逆にユーザ認証フラグを格納するセッションのIDはHTTPとHTTPS
IDを変えないようにしてやれば、ログインは維持したままで
情報のやりとりができるようになります。


さらにハイジャックされてしまったとしても、フラグ情報しか入っていないので危険度は低下します。


で、こういうことをしようとするとフレームワークだと弱いんだよなぁ…。
HTTPSでのログインを甘く見てる気がする。時期バージョンに期待。


[2959] http <--> https のセッション引継ぎ - PHPの基礎体力掲示
http://www.sound-uz.jp/php/bbs/thread/2959?view=flat


少年よ大志を抱け: PHP: セッションにセキュリティ対策する
http://bba-ltom.blogspot.com/2008/07/php.html


"redirect後にセッションが消える" フォーラム - CakePHP Users in Japan
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=840&forum=3


[PHP-users 21645]Re: セッションの受け渡しについて
http://ml.php.gr.jp/pipermail/php-users/2004-May/022169.html


PHPとセッションについて、なんとなくでもいいので教えてほしいのですが、ログイン画面はhttps行い、ログインしたらhttpで行うことにした場合、毎回session_startを行って.. - 人力検索はてな
http://q.hatena.ne.jp/1225263870


PHP: 実行時設定 - Manual
http://www.php.net/manual/ja/session.configuration.php#ini.session.referer-check


"session_idをローカルのcookieファイルに保存するには?" フォーラム - CakePHP Users in Japan
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=555&forum=3&post_id=1020

Eclipseの64bit版

残念なことに、どうもこいつは64bitになっても相変わらず重い。


Java関連/Eclipse(x64)のダウンロード - PukiWiki
http://www.techch.com/wiki/index.php?Java%E9%96%A2%E9%80%A3%2FEclipse%28x64%29%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89


あわせてこちらもどうぞ。


Java関連/Eclipse(x64)-WTPのインストール - PukiWiki
http://www.techch.com/wiki/index.php?Java%E9%96%A2%E9%80%A3%2FEclipse%28x64%29-WTP%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

Javaランタイムの64bit版を入れる方法

やっぱり時代は64bitだよね、ということで、
JVMも64bitを入れたくなりますね。


簡単で、64bit版IEとかのように、64bitのブラウザで
下記にアクセスすると、64bit版のDLにありつけます。


オペレーティングシステムJava のダウンロード一覧 - Sun Microsystems
http://java.com/ja/download/manual.jsp

firefoxでウインドウを閉じる

firefoxでは、

  • javascriptで開いたウインドウ
  • target='_blank'で開いたウインドウ

しか閉じれません。

あと、子ウインドウから親ウインドウの関数を操作することも
できますが、prototype.jsを使った関数だとうまくいかない。
まぁいいけどさ。


javascript 子ウィンドウから親ウィンドウへ子ウィンドウの値を親ウィンドウのフォームのテキストエリアへ値を渡す方法を教えてください。 親ウィンドウのフォームは<form.. - 人力検索はてな
http://q.hatena.ne.jp/1123471653


JavaScript/ウィンドウ/サブからメインウィンドウを操作する - TAG index Webサイト
http://www.tagindex.com/javascript/window/sub_to_main.html

404エラーを発生させる

とにかくエラーなんだよっ!という風に突っぱねたいときに
使える、404エラーの起こし方。

$this->cakeError('error404');


"404エラーを発生させる" フォーラム - CakePHP Users in Japan
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1005&forum=8&post_id=1981