My Photo

« ペーパードライバー講習を申し込んだ | Main | クッキーのSecure属性不備 »

December 15, 2013

クッキーの不適切な利用

Webアプリケーションでページをまたがる情報を保存する方法としては、PHPやServletコンテナなどが提供するセッション管理機構が用いられる。
一般的にセッション管理機構ではセッションIDのみをクッキーに保存し、データ自体はWebサーバのメモリやファイル、DBなどに保存する。

クッキーに保存すべきではない情報

クッキーにデータを保存することにより脆弱性となる場合を説明する。セッション変数は外部から書き換えができないのに対して、クッキーはアプリケーション利用者によって書き換えることができる。このため、書き換えると困る情報をクッキーに保存すると脆弱性の原因になる。
例えば、ユーザIDや権限情報をクッキーに保存していたため、権限外の操作や情報閲覧ができてしまう場合がある。

脆弱性とはならない場合でも、一般的にクッキーにデータを保存しないことが推奨される。

クッキー セッション変数
使いやすさ APIにより設定、取得 変数とほぼ同じように使える
配列やオブジェクトの格納 アプリケーション側で文字列に変換する必要あり 通常の変数同様に代入可能な場合が多い
サイズの制限 厳しい制限あり 実用上は無制限
利用者による格納情報の直接参照 容易 不可能
脆弱性などでクッキーが漏洩した際の情報漏洩しやすさ クッキーが漏洩するとデータも漏洩 漏洩のしにくさを制御可能
利用者によるデータ改ざん 容易 不可能
第三者によるデータ改ざん XSSやHTTPヘッダ・インジェクションなどの脆弱性があれば可能 クッキーを改変できる脆弱性があってもセッション変数は改変不可能
情報の寿命の制御 容易 セッション限り
異なるサーバとの情報共有 ドメインが同じであれば可能 基本的には不可能

表に示すように、クッキーで実現できてセッション変数で実現できない項目は情報の寿命の制御と異なるサーバとの情報共有だけである。
セッション変数で「漏洩のしにくさを制御可能」というのは、次のような理由からである。Webアプリケーションでは機密性の高い情報を表示する場合にパスワードの再入力(再認証)を求めるように実装することができる。また、セッションに保存されている情報はセッションタイムアウトすると表示されなくなる。クッキー自体に情報を保存している場合は、このような制御は困難である。
セッションやサーバをまたがって情報を保存する必要性がある場合には、クッキーを使用する。例としては、ログイン画面における「ログイン状態を保持する」という機能がある。この場合でもクッキーに保存すべき情報はトークンと呼ばれる乱数であって、IDやパスワードなどをデータとしてクッキーに保存するわけではない。

参考文献:体系的に学ぶWebアプリケーションの作り方 4.8.1 クッキーの不適切な利用

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
徳丸 浩

ソフトバンククリエイティブ 2011-03-03
売り上げランキング : 4070

Amazonで詳しく見る
by G-Tools

« ペーパードライバー講習を申し込んだ | Main | クッキーのSecure属性不備 »

セキュリティ」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/58762845

Listed below are links to weblogs that reference クッキーの不適切な利用:

« ペーパードライバー講習を申し込んだ | Main | クッキーのSecure属性不備 »

May 2017
Sun Mon Tue Wed Thu Fri Sat
  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 29 30 31      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof