JSのデバイスフィンガープリントが重なりすぎる
解決したいこと
Webブラウザ上で利用可能な投票サービスにおいて,重複投票を禁止するためのデバイスフィンガープリント認証がバグること.
発生している問題・エラー
投票を実行しているデバイス上で,まだ投票をしていないのに「投票済み」と表示され,サービス利用ができないこと.
私の学校のクラスで試験導入し,その半数のアンケート結果によると半数が投票できていない状況でした.そしてアンケートに答えていない人も含めると投票できた人は39人中の15人しかいなかったです.
該当するソースコード
fingerprint.js
とvote.js
のコードをGitHub上から表示しておきます.
デバイスフィンガープリントに使用している情報は以下の10種類です.
- User Agent
- 言語
- 画面解像度
- タイムゾーン
- プラットフォーム
- CPUコア数
- デバイスメモリ
- タッチサポート
- Canvasフィンガープリント
- WebGLフィンガープリント
これらの10種類は,そうそう重ならない物だと思っていたのですが,同種の端末だからか重なってしまったのかもしれません.
自分で試したこと
フィンガープリントと共に使用しているCookie認証の緩和
重要な補足
このサービスは学校で使っている物であって,製との端末は全て一緒です.CPUコア数や画面解像度,言語,タイムゾーン等の情報が揃いやすく,そのうえOSバージョンも揃いやすい状況です.
そのような状況でも他の人のデバイスと重なりにくいフィンガープリント情報を教えていただけると助かります.
またデバイスフィンガープリントの情報はGoogle Firebase Realtime Detabase上でリストデータとして格納しています.そのデータがリセットされる(=投票数がゼロになる)とスレーブも再読み込みをかけ投票ブロック状態を解除します.解除(リセット)はマスターでかけるためCookieやデバイスストレージの利用はバグの元であることは既に確認済みです.