とある相談がきて、あるシステムでいたずら利用者が増えてきており、クレームにつながっていると連絡がありました。
調査した結果、あるプロバイダー経由でのアクセスだったため、IPアドレスは動的に変化しており、IP制限では防げないアクセスでした。
どうにか防げないものかと調べていると、Browser Fingerprintという技術を使えば、完全なる特定ではないにしろ、ほぼほぼ防げるところまでできました。
今回はBrower Fingerprintの解説をしていきます。
Browser Fingerprintとは
Fingerprintとは、日本語で言うと”指紋”となります。
ブラウザから読み取れる情報は様々あります。
読み取れる情報例)
- ブラウザの種類
- フォント
- 言語
- 時間帯
- OSの種類
- プラグイン
- 画面の解像度
これらの情報は一つ一つは他人と共通している項目もあると思います。
例えば、OSの種類だと、MacOSXを使っているユーザはこの世にたくさんいます。
しかし、上記の読み取れる種類の組み合わせを利用すると、数百万人に一人ぐらいヒットするぐらいになります。
そのため、およそのユーザの特定はできるので、プログラムより制限が可能になっております。
Browser Fingerprintで取得できるパラメータの説明
今回は、Github上にあるFingerPrint2を利用して情報を取得していきます。
- userAgent: ユーザエージェント
- language: 言語
- colorDepth: ディスプレイの色深度
- deviceMemory: デバイスのメモリサイズ(G)
- hardwareConcurrency: CPUのコア数
- screenResolution: 解像度
- availableScreenResolution: 利用可能な解像度
- timezoneOffset: タイムゾーンでUTCとの時差を表す
- timezone: タイムゾーン
- sessionStorage: sessionStorageを使っているかどうか
- localStorage: localStorageを使っているかどうか
- indexedDb: indexedDbを使っているかどうか
- addBehavior: addBehaviorを使っているかどうか
- openDatabase: openDatabaseを使っているかどうか
- cpuClass: CPU名
- platform: CPUの呼び方
- plugins: 利用しているプラグイン
- canvas: キャンバス
- webgl: ウェブGL
- webglVendorAndRenderer: グラフィックボード
- adBlock: 広告ブロックしているかどうか
- hasLiedLanguages: ダミーの言語かどうか
- hasLiedResolution: ダミーの解決かどうか(これはわからない・・)
- hasLiedOs: ダミーのOSかどうか
- hasLiedBrowser: ダミーのブラウザかどうか
- touchSupport: タッチサポート(これはわからない・・)
- fonts: フォント
- audio: オーディオ
利用方法
各種パラメータを保存して、その中身を見比べて全てパラメータが一緒であれば、同一ユーザとしてプログラムを組めば、ユーザを特定できそうです。
また、Fingerprintは、ドメインをまたがっていても同じ情報が読み取れるので、複数サイトを運営していたら複数サイトからのアクセスでもユーザを特定できるでしょう。
まとめ
Browser Fingerprintでほぼユーザを特定することは可能になるでしょう。
あとは、工夫次第でいたずら等が横行していたら、ユーザを特定してそのユーザだけ違うサイト(ダミーサイト)等に飛ばしたり、アクセス制限をかけたり等の対応ができるでしょう。
Browserからの情報って最近は色々な情報が取れるんですね。