システム屋日誌

情報システム構築、開発手法を中心に気が付いたことを書き留めます。ちいさなことから、おおきなことまで。もちろん、どうでもいいことも。。。
<< February 2018 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 >>
 
RECENT COMMENT
RECENT TRACKBACK
れいねっとHP
http://www.rey-net.com
MOBILE
qrcode
PROFILE
無料ブログ作成サービス JUGEM
 
セッションとセキュリティ 
インターネット上でPC(クライアント)とWebサーバがデータをやり取りする方法の一つに「セッション」があります。セッションは、クライアント側のクッキーやサーバ側に書き込むセッションを使って、Web上で交換されるデータを識別します。セッションを使った場合、システムに脆弱性(ぜいじゃくせい)が生じることがあります。セッション脆弱性を防ぐ方法をメモにまとめました。

セッションは、WebサーバとHTTP のやり取りを行っているブラウザの1つ1つに用意されます。ショッピングカートを利用しているとき、別の商品ページに移動してもカートの中身が維持されているのは、セッションを使ってブラウザのデータを記録しているからです。

セッション管理は、サーバ側で管理するやり方と、クライアントPC側のクッキーで管理する2種類の方法があります。

サーバ側で管理する場合、クライアント側のクッキーを使いません。携帯電話などは、クッキーが使えないので、サーバ側でセッションを管理します。しかし、セッションをサーバ側に残しておくことで、セキュリティ上の問題が発生します。

それは、セッションを作成したクライアント(ブラウザ)が特定できないため、作成した本人以外でも、セッションに書き込まれた情報をみることができてしまいます。クライアント側のクッキーを有効にすれば、どのPCのどのブラウザか特定できます。万が一、セッションを作成したブラウザ以外がショッピングカートの途中に入り込もうとしても、セッションが無いので、エラーにすることができます。

クライアント側のクッキーを有効にするための対策は以下のような方法が考えられます。ひとつは、ユーザにクッキーの利用を促す措置。もうひとつは、クライアント側でのみ、セッションを管理するように、プログラム上で設定を変更します。

1、クライアントがクッキーを使っていない場合、警告を出す。
 クッキーを利用していないユーザに対して、ショッピングカートなど、
 セッションを利用した機能が使えない内容のメッセージを出します。
 具体的には、HTML ファイルが読み込まれたとき、やフォーム送信時
 などに Javascript で警告を出します。
 function check_cookie()
 {
 if (!navigator.cookieEnabled) {
 alert("クッキーへの書き込みができません");
 return;
 }
 }
ちなみに、デバッグ時など、現在クッキーに何が書き込まれているか確認するには、以下のコードを使ってみてください。
 alert(document.cookie);

セッションID がクッキーに書き込まれている場合、PHPSESSID=セッションIDと表示されます。

 例)PHPSESSID=28e3d6d6b5c22792068c258520a01014

2、サーバ側でセッション処理を開始する前に、PHP設定を変更する。
 <?PHP
ini_set('session.use_only_cookies', 1); // 常にユーザのクッキーを有効にする

session_start(); // セッション開始
:
?>

session_start()のみを実行すると、セッションを作成したクライアント以外でも、セッションを保存した情報を見ることができます。セッションにひも付く値にするためには、クライアント側のクッキーを有効にして、クライアント側にセッションID(SID)を保存する必要があります。ini_set()は、PHPの環境変数をモジュールが有効な間、動的に変更することができます。

クッキーが使えない携帯電話の場合はどうなるか。。
調査してしてみます。

参考URL:http://jp.php.net/manual/ja/ref.session.php
参考文献:
PHPサイバーテロの技法―攻撃と防御の実際
コメント
コメントする









 
トラックバック
この記事のトラックバックURL
http://technology.rey-net.com/trackback/490446