Subscribed unsubscribe Subscribe Subscribe

SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

Tips, about Cookie.

WebにおいてCookieは重要な概念なのでTipsとして残します。

Cookie


CookieはWebブラウザがキャッシュデータを保持するためのHTTPの機能。Cookieを使うことで一度アクセスしたwebページに対して、再度アクセスする度にキャッシュ情報から利用者の識別がされ、継続したユーザ利用を実現することができる。
代表的なキャッシュ情報は主に以下が挙げられる。

  • ユーザーのリクエスト情報
  • IP アドレス
  • リクエストの送信日時
  • 使用されたブラウザの種類
  • 言語
  • その他ブラウザを識別する情報


たとえば、Googleはキャッシュデータを使ってwebページにアクセスしたユーザデータを保有している。そのデータを元に、新しくページに訪れたユーザか戻ってきたユーザかを判断したり、ユーザがどのページに訪れたのかを解析しており、cookieやピクセルタグにより大規模な広告ネットワークが構築されている。こうしたキャッシュのデータをトラッキングとして用いることで、ユーザに対して適切な広告を様々なページで表示するというビジネスを実現している。

ピクセルタグ
ピクセル タグはウェブサイトやメールの本文内に配置される技術の 1 つで、ウェブサイトでのアクティビティ、またはいつメールの開封やメールへのアクセスが行われたのかをトラッキングすることを目的としている。通常は Cookie と組み合わせて使用される。


現在のWebではキャッシュによるデータの保持は当たり前のように利用されている仕組みであるが、このような便利さの裏返しにはweb上のプライバシーの問題といったものもつきものである。実際に情報の保持を嫌うユーザも少なくはなく、たとえばDuckDuckGoといったプライバシーの保護と情報の保持を行わないanti-Google検索エンジンも存在している。


Cookieを実装


Cookieでのユーザ情報を保持し、ユーザがページにアクセスした回数を表示するコードをGAEで実装しました。ユーザが10000回ページに訪れた時に違うメッセージが表記されるようになっています。


Cookieのvisits変数にアクセス回数を保持し続けて、更新の度にインクリメントされるのですが、注意しなければならないことは、悪意の持ったユーザによってキャッシュが操作されないようにすることです。ここでは先日のエントリに書いたHMACを利用してhash化をしており、visitsの値に対するhashが同一でないとキャッシュが0に戻ってしまうように実装しています。
Cookieを扱うWebではこのようなセキュリティ面について注意を払って実装しないと、情報の操作や情報漏洩といったクリティカルな問題を引き起こしてしまうので、Cookieといったキャッシュの勉強の際にはセキュリティについての勉強も必要となります。


saltでセキュアな対応


Webでのセキュリティ対策としては、saltが有名です。
組込みライブラリで多いsha256といったhash化は、アルゴリズムを知っているユーザやレインボウテーブルによって解読される恐れがあります。それではセキュリティが成り立たないため、たとえば上記コードのように予測不能なsaltを足してhash化を行うことで高いセキュリティを実現することができます。


saltをrandom関数を用いてランダムに文字列を取得し、その文字列をhash化したいname+pwに付け足します。saltは常に変動するため、実行の度にhash値が変わり、外部のユーザはhash値を予測することができなくなります。



DuckDuckGoに大変興味が湧いてきた。
duckduckかわいい。

Remove all ads