🥳Scrapeless コミュニティ に参加し、無料トライアルを請求して、強力な Web スクレイピング ツールキットにアクセスしてください。
ブログに戻る

キャンバスフィンガープリンティングとは何か、そしてそれを回避する方法

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

14-Nov-2024

キャンバスフィンガープリンティングは、クッキーなどの従来の方法に頼らずに、ユーザーのデバイスに関する固有の情報を取得する、オンライン追跡の一種です。この手法では、ブラウザにHTML5キャンバス要素に隠れたグラフィックを描画するよう指示することで、ユーザーのデバイスの「フィンガープリント」を作成し、そのデバイスのハードウェアとソフトウェアに固有の微妙な変化を記録します。これらの微妙な違いは、異なるウェブサイト間でユーザーを識別および追跡するのに十分です。この技術は広告主や分析プロバイダーにとって強力なツールですが、同時に深刻なプライバシー上の懸念も提起しています。この記事では、キャンバスフィンガープリンティングの仕組み、その用途、ユーザーがそれを回避する方法を探ります。

キャンバスフィンガープリンティングとは?

キャンバスフィンガープリンティングは、HTML5の<canvas>要素を使用して画像またはテキストをレンダリングし、そのコンテンツの描画方法を分析することで機能します。この画像は、グラフィックカード、オペレーティングシステム、ブラウザバージョン、インストールされているフォントなど、デバイスとブラウザ固有のさまざまな要因の影響を受けます。キャンバスフィンガープリンティングを使用するサイトにユーザーがアクセスすると、サイトはキャンバスのレンダリング出力に基づいて一意のハッシュコードを生成して保存できます。このハッシュはデジタルフィンガープリントとして機能し、クッキーやその他の従来の追跡方法がブロックまたは削除されても、一貫性を保ちます。

クッキーとは異なり、キャンバスフィンガープリントは、ユーザーのデバイスにファイルを残さないため、ユーザーが検出または制御するのが困難です。これにより、キャンバスフィンガープリントは、クライアント側にデータを保存する必要がないため、特に「ステートレス」な追跡に効果的です。

なぜキャンバスフィンガープリンティングが使用されるのか?

キャンバスフィンガープリンティングは、次のような理由で人気があります。

  • 広告ターゲティング: クッキーをクリアしたり、シークレットモードを使用したりするなどのプライバシー対策をユーザーが使用していても、広告主が異なるウェブサイト間でユーザーを追跡し、詳細なプロファイルを構築することを可能にします。
  • セキュリティと不正検出: 一部の企業では、フィンガープリンティングを使用して、デバイスが複数のセッションで一貫性があることを確認することで、不正行為を防いでいます。
  • 分析: ウェブサイトやプラットフォームは、フィンガープリンティングを使用してユーザーの行動データを収集し、ユーザーエクスペリエンスの向上とコンテンツの最適化に役立てることができます。

キャンバスフィンガープリンティングの仕組み

キャンバスフィンガープリンティングは、デバイスのグラフィックレンダリング機能に基づいて一意のフィンガープリントを生成することで、ユーザーを追跡するテクニックです。ユーザーがこのテクノロジーを使用するウェブページにアクセスすると、JavaScriptスクリプトが実行され、HTML5の<canvas>要素に特定の画像またはテキストが描画されます。この画像はランダムな変化を伴ってレンダリングされ、オペレーティングシステム、GPU、ブラウザ、その他の環境要因の違いにより、ユーザーのデバイスに固有のものになります。

ステップバイステップの詳細:

  1. キャンバスデータの要求: キャンバスフィンガープリンティングを使用するページにアクセスすると、サイトはJavaScriptを実行し、ブラウザにキャンバス要素に画像またはテキストを描画するよう指示します。

  2. レンダリングの詳細: ブラウザのレンダリングは、デバイスのハードウェア(GPUなど)、インストールされているフォント、ソフトウェアの影響を受け、画像またはテキストにわずかな変化が生じます。たとえば、最新のデバイスでは、アンチエイリアシング、ヒント、または視覚出力を変えるその他のテクニックが適用される場合があります。

  3. ハッシュの生成: コンテンツがレンダリングされた後、サイトは画像またはテキストを取得し、そのレンダリングに基づいて一意のハッシュを生成します。このハッシュはユーザーのフィンガープリントとして機能します。

  4. サイト間の追跡: フィンガープリントが保存されると、ウェブサイトは、クッキーに頼ることなく、異なるセッションや異なるサイト間でユーザーを追跡できます。

キャンバスフィンガープリンティングの例

キャンバスフィンガープリンティングがどのように機能するかを示す、基本的なJavaScriptの例を以下に示します。

javascript Copy
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
ctx.font = '16px Arial';
ctx.fillText('Hello, world!', 10, 50);
var imageData = canvas.toDataURL();
console.log(imageData);

この例では、「Hello, world!」というテキストがキャンバスに描画され、toDataURL()メソッドは、画像を表すBase64エンコードされた文字列を生成します。この文字列は、オペレーティングシステム、ブラウザのレンダリングエンジン、デバイスのGPUなどの要因に依存するため、ユーザーのデバイスに固有です。

コンテンツが異なるデバイス間で同じように見える場合でも、レンダリングは、異なるスムージングテクニック、フォント、またはピクセルレンダリングなどの微妙な点で異なる可能性があります。これらの違いは、各デバイスに固有のフィンガープリントを生成します。

フィンガープリントを調べるためのツール

ユーザーのフィンガープリントを調べるには、BrowserLeaksなどのツールを使用できます。

生成された画像のハッシュ値は、フィンガープリンティングプロセスの重要な部分です。このハッシュの生成方法を理解することは、キャンバスフィンガープリンティングを回避するために不可欠です。

キャンバスフィンガープリンティングにおけるハッシュの仕組み

キャンバスフィンガープリンティングによって生成される画像データは大きくなる可能性があるため、ハッシュを使用して、ハッシュと呼ばれる、より短く固定長の文字列に変換します。ハッシュ関数を使用すると、同じ入力に対して常に同じ出力が生成されます。

たとえば、「unique fingerprint」というフレーズをSHA-256ハッシュ関数に入力すると、出力は次のようになります。

d2d2d2c6e2f2e4fa2d54c7c16ad01a3177c8d24138d2872b577a229ec0b963f0

入力をわずかに変更した場合、たとえば「fingerprint」の「e」を「a」に変更すると、ハッシュは次のようになります。

3a4e7d8f2d25481a9d2d7a03c2f5fe6d813a67c4c4ea8b063f35e2b202ee5e4d

これは、入力(文字の変更やシステム属性の変更など)のわずかな違いでも、完全に異なるハッシュになることを示しています。この特性は、キャンバスフィンガープリンティングを回避する場合に不可欠です。わずかな違いによって、以前のフィンガープリントが無効になる可能性があり、異なるセッションやデバイス間でユーザーを追跡することが難しくなるためです。

キャンバスフィンガープリンティングによるプライバシー上の懸念

キャンバスフィンガープリンティングは、ユーザーの知識や明示的な同意なしにユーザーを追跡するため、深刻なプライバシー上の懸念の根源となっています。ユーザーは、ブラウザのレンダリングエンジンに依存し、許可を必要としないため、キャンバスフィンガープリンティングを簡単に制御したり、検出したりすることはできません。さらに、ユーザーが削除できるクッキーとは異なり、フィンガープリントは消去が難しく、ブラウジングセッションとウェブサイト全体で永続的な識別子を作成します。この透明性の欠如は、特にGDPRなどの規制において、プライバシーとデータ保護に関する議論を引き起こしており、これらの規制では、追跡にはユーザーの同意が必要です。

キャンバスフィンガープリンティングを回避する方法

キャンバスフィンガープリンティングは、微妙なデバイス固有の詳細をレンダリングして一意の識別子を作成するため、その回避は困難です。ただし、これらの詳細をマスクしたり、不明瞭にしたりすることで、ウェブサイトが信頼性の高いフィンガープリントを生成することを難しくする、いくつかの戦略があります。目標は、追跡プロセスを妨害するために、キャンバス要素の動作を修正または操作することです。

キャンバスレンダリングプロセスの操作

キャンバスフィンガープリンティングを回避する一般的な方法の1つは、レンダリング出力を直接変更することです。キャンバスフィンガープリンティングは、グラフィックやテキストの一意のレンダリングに依存するため、結果を変更する方法が効果的です。たとえば、1つのアプローチは、<canvas>要素のgetImageData()関数を介入して、一様またはランダムな画像を返すように強制することです。これは、JavaScriptを使用してメソッドをオーバーライドすることで実行できます。

javascript Copy
HTMLCanvasElement.prototype.getContext = (function(original) {
    return function(type) {
        var context = original.call(this, type);
        var originalGetImageData = context.getImageData;
        context.getImageData = function(x, y, width, height) {
            return {
                data: new Array(width * height * 4).fill(255) // 一様な画像(空白)を返す
            };
        };
        return context;
    };
})(HTMLCanvasElement.prototype.getContext);

このコードでは、キャンバスのコンテキストと描画関数にアクセスするために使用されるgetContextメソッドをオーバーライドしています。getImageData関数を変更することで、呼び出されるたびに空白の一様な画像が返されるようになります。これにより、ウェブサイトはフィンガープリンティングに必要な一意のキャンバスデータを取得できなくなります。このテクニックは万能ではありませんが、キャンバスフィンガープリンティングの効果を大幅に軽減できます。

プライバシーに重点を置いたブラウザと拡張機能の使用

別の方法は、Torのようなプライバシーに重点を置いたブラウザ、または追跡防止機能が組み込まれているブラウザを使用することです。これらのブラウザには、キャンバスフィンガープリンティングを含む、フィンガープリンティングテクニックを妨害する機能が搭載されている場合が多いです。たとえば、Torブラウザは、一貫性のあるキャンバスデータをキャプチャできないように、いくつかのフィンガープリンティング防止対策を実装しています。目標は、すべてのユーザーが異なるウェブサイト間で同じように見えるようにすることで、ウェブサイトが個別にユーザーを追跡することをはるかに困難にすることです。

プライバシーに重点を置いたブラウザの使用に抵抗があるユーザー向けには、キャンバスフィンガープリンティングの試みを具体的にターゲットにしてブロックできる、ブラウザ拡張機能もあります。CanvasBlockerPrivacy Badgerなどの拡張機能をブラウザに追加すると、スクリプトがキャンバスデータをキャプチャできないようにできます。これらの拡張機能は、キャンバス画像が描画されるたびに、積極的にブロックしたり、ランダム化したりして、フィンガープリントを不明瞭にし、プライバシーを保護します。

キャンバス出力のランダム化

より技術的なアプローチとしては、キャンバス出力をランダム化して、フィンガープリンティングスクリプトが実行されるたびに、生成された画像が異なるようにすることができます。キャンバスにレンダリングされるテキスト、フォント、またはその他の要素に、小さくランダムな変化を加えることで、同じサイトに複数回アクセスした場合でも、各フィンガープリントがユニークに見えるようにすることができます。

たとえば、毎回同じテキストをレンダリングするのではなく、JavaScriptを使用して、キャンバスが使用されるたびに異なるテキストまたは画像をランダムに生成することができます。これを行う方法の例を以下に示します。

javascript Copy
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var randomText = Math.random().toString(36).substring(7); // ランダムなテキストを生成
ctx.font = '16px Arial';
ctx.fillText(randomText, 10, 50);
var imageData = canvas.toDataURL();
console.log(imageData);

テキスト(randomText)をランダムに生成することで、キャンバス画像が描画されるたびに、異なる画像が生成されます。これにより、出力が連続するページ読み込みで同じになることがないため、ウェブサイトがユーザーのフィンガープリントに基づいて一貫性のある方法でユーザーを追跡することがはるかに困難になります。

より強力な保護のための方法の組み合わせ

キャンバスフィンガープリンティングを効果的に回避するには、これらの方法を組み合わせることが最適です。たとえば、CanvasBlockerなどの拡張機能を備えたプライバシーに重点を置いたブラウザを使用すると、複数の保護レイヤーを追加できます。この組み合わせは、特定の回避方法が完全に完璧ではない場合でも、デバイスが一貫性のあるフィンガープリントを生成しないようにすることができます。

キャンバスレンダリングプロセスの操作、プライバシー強化ブラウザと拡張機能の使用、出力のランダム化によって、キャンバスフィンガープリンティングを効果的に回避できます。いずれの方法も完全な匿名性を保証するものではありませんが、これらの手順を実行することで、このテクニックに依存するウェブサイトによる追跡の可能性を大幅に減らすことができます。

スクレイピングソリューション: スクラピングソリューションをお探しの方には、**Scrapeless**などのツールを使用すると、フィンガープリンティングの問題を回避できます。Scrapelessは、データ抽出のための強力なフレームワークを提供し、ユーザーはブラウザベースの追跡テクニックを回避して、効率的かつ検出不可能な方法でリクエストを処理できます。Scrapelessを今すぐ無料でお試しください強力で簡素化されたスクレイピングエクスペリエンスを体験できます。

まとめ

キャンバスフィンガープリンティングは、一意のデバイスの詳細を取得して永続的な識別子を作成する、高度で秘密裏な追跡方法であり、広告やセキュリティにとって貴重なものです。ただし、検出不可能な性質と、クッキーなどの従来の追跡制御に対する耐性のために、プライバシー上の懸念も提起しています。キャンバスフィンガープリンティングを完全に回避することは難しいですが、プライバシーに重点を置いたツール、ブラウザ、テクニックを使用することで、追跡のリスクを大幅に軽減できます。オンラインプライバシーの需要が高まるにつれて、ブラウザがフィンガープリンティング防止機能をサポートするようになり、このような高度な追跡テクノロジーからユーザーデータを保護するための規制措置がとられることが予想されます。

Scrapeless では、適用される法律、規制、および Web サイトのプライバシー ポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツはデモンストレーションのみを目的としており、違法または侵害的な活動には関与していません。 私たちは、このブログまたはサードパーティのリンクからの情報の使用についていかなる保証もせず、一切の責任を負いません。 スクレイピング活動を行う前に、法律顧問に相談し、対象となる Web サイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ