Cookieや登録なしでユーザーを特定する方法
状況を想像してみてください:ユーザーがシークレットモードでサイトにアクセスし、キャッシュをクリアし、プロキシでIPを変更しても、それでも同じ人物だと特定する必要があるとします。なぜでしょうか?例えば、攻撃者がパスワードを延々とブルートフォース攻撃することを防いだり、同じ「新顔」顧客に10回目のウェルカム割引を表示することを避けたりするためです。
LocalStorageやCookieのような従来の手法はここで失敗します — 它们はワンクリックで消去できてしまいます。これがまさにFingerprintJSが解決する問題です。数十のブラウザとデバイスの間接的なシグナルを収集し、固有の訪問者識別子を作成するライブラリです。
それは何で、どのように動作するのか
FingerprintJSはブラウザフィンガープリントのためのオープンソースツールです。簡単に言えば、このライブラリはブラウザにクエリを送信します:「どんなフォントがインストールされていますか?画面解像度は何ですか?Canvasでどのようにグラフィックスをレンダリングしますか?」
個別に考えると、このデータはあまり意味を持ちません。何百万人もの人が1920x1080の解像度でWindows上でChromeを使用しています。しかし、エンジンのバージョン、利用可能な言語の一覧、タイムゾーン、オーディオスタックのパラメータ、特定のフォントのレンダリング特性を組み合わせると、ほぼすべてのデバイスに固有の組み合わせが得られます。これらのデータはすべてハッシュ化され、短い文字列 — visitorId — が得られます。
プロジェクトを素早く立ち上げる方法
統合は非常に開発者フレンドリーです。npmでインストールできます:
npm install @fingerprintjs/fingerprintjs
そして、数行のコードで起動できます:
import FingerprintJS from '@fingerprintjs/fingerprintjs'
async function initFingerprint() {
// Инициализируем агент при запуске приложения
const fpPromise = FingerprintJS.load()
const fp = await fpPromise
const result = await fp.get()
// Вот он, наш уникальный ID
console.log(result.visitorId)
}
initFingerprint()
バンドラーを使用したくない場合、ライブラリはCDN経由でも利用可能です。ただし注意点があります:一部の攻撃的な広告ブロッカーやBraveのようなブラウザでは、外部ドメインからのスクリプト読み込みをブロックする可能性があります。そんな場合、作者たちはnpmパッケージを使用し、コードを独自のバンドルにまとめることを推奨しています。
これが本当に役立つ場面
私の経験では、このようなツールは最も頻繁にセキュリティと分析のタスクで登場します。
第一に、不正検知です。誰かがリファラルボーナスを得るために50個のアカウントを登録しようとした場合、FingerprintJSはこれらの「異なる」人々が同じノートパソコンの裏にいることを浮き彫りにします。
第二に、アクセス制限です。ユーザーにログインを強いることなく、免费コンテンツの閲覧回数を制限できます(主要メディアがそうしているように)。
第三に、パスワードブルートフォース攻撃からの保護です。1つのデバイスからのログイン試行が異なるユーザー名を使用している場合、その特定の「フィンガープリント」のアクセスをブロックする理由になります。同じIP上の他のユーザー(例えばオフィスビル内)には影響を与えません。
事前に把握しておくべきこと
このライブラリは素晴らしいですが、「銀の弾丸」ではありません。オープンソースバージョンには制限があり、開発者たちはREADMEに正直に記述しています。
無料版の精度は、商用クラウド製品よりも低いです。すべての計算がクライアント側で発生するため、上級ユーザーは一部のブラウザパラメータを偽装してIDを変更できます。
さらに、ユーザーがブラウザやオペレーティングシステムを更新すると、フィンガープリントも変わる可能性があります。永続的な識別子ではなく、むしろ非常に信頼性の高い一時的なマーカーです。
FingerprintJSは、Cookieを使用せずにセキュリティレイヤーや基本的な分析を追加する必要がある場合に最適な選択です。このプロジェクトはアクティブで、大きなコミュニティ(GitHubでほぼ28,000個のスター)と明確なドキュメントを持っています。
あなたに適していますか?目標がボットの90%と初心者レベルの不正者をフィルタリングすることなら、答えは明確に「はい」です。銀行システムのように重要なセキュリティ要件がある場合は、サーバーサイド検証を伴う有料ソリューションを検討する必要がありますが 대부분의 웹プロジェクト에게는 MIT 버전의 기능이十分합니다.
You can try the library in action on their demo page — open it in normal mode, then in incognito, and you'll see that the magic works.
関連プロジェクト