navigator.platformフィンガープリント — OS検出の仕組みと問題点
ブラウザ・デバイス

navigator.platformフィンガープリント — OS検出の仕組みと問題点

navigator.platformがOSをサイレントに公開する仕組み。Apple SiliconでもMacIntelと返す矛盾と対策を解説。

8分で読める·

navigator.platform は、あらゆるウェブサイトにあなたのOSを 静かに、即座に、許可を求めることなく伝えるJavaScriptプロパティです。ブラウザフィンガープリンティングパズルの小さくも永続的なピースであり、モダンブラウザを実行するすべてのデバイスが 公開しています。自分の値を今すぐ whatsmy.fyiで確認できます。

TL;DR

navigator.platform は、OSを識別する文字列を返す読み取り専用の JavaScriptプロパティです。返される値は "Win32" "MacIntel""Linux x86_64" などです。 パーミッションは不要で、ネットワークリクエストも発生せず、訪問するすべてのページの すべてのスクリプトから読み取れます。単独では低エントロピー(約2〜4ビット)ですが、 フィンガープリンティングシステムは30以上の他のシグナルと組み合わせてデバイスを 一意に識別します。また、Appleシリコン搭載のMacでも依然として"MacIntel" と報告するため、数億台のデバイスで事実と 異なる値を示しています。モダンな代替手段は navigator.userAgentData.platform です。

navigator.platform フィンガープリンティングとは?

navigator.platform は、1990年代半ばからJavaScriptが読み取れる ブラウザプロパティセットである Navigator APIの一部です。キャンバスレンダリングやWebGL出力のような複雑なGPU操作を 必要とする手法とは異なり、navigator.platform の読み取りは 非常に簡単です:

console.log(navigator.platform);
// "Win32"          — Windows (both 32-bit and 64-bit)
// "MacIntel"       — macOS Intel AND Apple Silicon
// "Linux x86_64"   — Linux on 64-bit x86
// "iPhone"         — iOS on iPhone
// "iPad"           — iPadOS (older iPads; see below)

この値は、パーミッションプロンプトも、オプトインダイアログも、 ネットワークラウンドトリップも必要とせず、すべてのページのすべてのスクリプトから 利用可能です。トラッキングや不正検出スクリプトがこの値を収集しても、 あなたには何も通知されません。

navigator.platform フィンガープリンティングとは、 より大きなデバイスフィンガープリントの一シグナルとしてこの値を含めることです。 エントロピーが低すぎるため、正規のフィンガープリンティングシステムがnavigator.platform のみに依存することはありません。 その力は、複合フィンガープリントに小さなエントロピーを貢献することと、 不正検出システムが他の偽装値の矛盾を検出するためのアンカーシグナルとして 機能することにあります。

電子フロンティア財団(EFF)のCover Your Tracks ツールは、測定シグナルの一つとして「システムプラットフォーム」を明示的にテストして います。EFFの2010年のPanopticlick研究では、470,161のブラウザのうち84%が フィンガープリントのみで完全に一意に識別可能であることが判明しました。 FlashやJavaがインストールされたブラウザでは、この数値は94%に上昇します。

navigator.platform はどのように機能するのか?

このプロパティは、基礎となるオペレーティングシステムに基づいてブラウザ起動時に 設定されます。WHATWG HTML仕様では正確なフォーマットは完全にブラウザの実装に 委ねられており、標準化された値のリストは存在しません。ブラウザは仕様ではなく 歴史的な慣例によって一連の文字列に収束してきました。

値の読み取り

フィンガープリンティングスクリプトは、副作用なしに単一の同期呼び出しでnavigator.platform を読み取ります:

// Reading navigator.platform — zero cost, zero visibility to user
function getPlatformSignal() {
  return {
    platform: navigator.platform,
    // Often combined immediately with other navigator properties
    hardwareConcurrency: navigator.hardwareConcurrency,
    deviceMemory: navigator.deviceMemory,
    language: navigator.language,
    languages: navigator.languages,
    maxTouchPoints: navigator.maxTouchPoints,
  };
}

// Example output on a MacBook Pro (Apple Silicon):
// {
//   platform: "MacIntel",       ← factually wrong — it's ARM, not Intel
//   hardwareConcurrency: 10,    ← 10 CPU cores
//   deviceMemory: 8,            ← 8 GB RAM
//   language: "en-US",
//   languages: ["en-US", "en"],
//   maxTouchPoints: 0,          ← no touch screen
// }

整合性の検証 — フィンガープリンティングの真の力

不正検出システムは navigator.platform を真実のアンカーとして扱います。 ブラウザが User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) を 送信しているにもかかわらず、navigator.platform"Linux x86_64" を返す場合、その矛盾は偽装、自動化、または 設定が誤ったヘッドレスブラウザのほぼ確実なシグナルです。 期待される相関関係は以下の通りです:

  • "Win32" → ユーザーエージェントには Windows が含まれる必要があります
  • "MacIntel" → ユーザーエージェントには Mac OS X が含まれる必要があります
  • "Linux x86_64" → ユーザーエージェントには Linux が含まれる必要があります
  • "iPhone" → ユーザーエージェントには iPhone が含まれ、タッチイベントが発生する必要があります

よくある自動化の間違いは、MacやiPhoneを偽装するためにコマンドラインフラグで カスタムユーザーエージェント文字列を設定しながら、navigator.platform を 同時にオーバーライドしないことです。この不一致は即座に検出されます。

実際に使われているプラットフォーム文字列の値

ブラウザが返す可能性のある文字列と、その実際の意味:

プラットフォーム文字列意味デスクトップOSシェア
"Win32"Windows — 32ビットと64ビットの両方(Chrome、Edge、モダンFirefoxは64ビットWindowsでもこれを返します)約72%
"MacIntel"Intel上のmacOS — また、後方互換性のために依然としてこの文字列を返すAppleシリコンのM1/M2/M3/M4 Macすべて約16%
"Linux x86_64"64ビットx86上のLinux(ほとんどのLinuxデスクトップユーザー)約4.7%
"Linux armv7l"ARM上のLinux — Raspberry Pi、Chromebook、デスクトップモードの一部のAndroid1%未満
"iPhone"iPhoneのiOSモバイル:モバイルOSの約28%
"iPad"iPadOS — ただしiPadOS 13以降で「デスクトップ用Webサイトを表示」を有効にすると "MacIntel" を返しますモバイル:縮小傾向
"Win64"64ビットWindowsの旧Firefox(Firefox 63以降は一貫性のために "Win32" に変更)レガシー

AppleシリコンとiPadのパラドックス

navigator.platform を単に不正確なだけでなく、積極的に誤解を招く ものにする、2つの文書化された挙動があります。

AppleシリコンはなぜMacIntelを返すのか

2020年末に登場したARMベースのプロセッサを搭載するすべてのM1、M2、M3、M4チップの Macは、依然として navigator.platform === "MacIntel" と報告します。 AppleとブラウザベンダーはAccuracy(正確さ)よりもBackward compatibility (後方互換性)を選択しました。"MacARM" のような文字列に変更すると、 macOS固有の動作を適用するために "MacIntel" をチェックしている レガシーコードが壊れるためです。その結果、数億台のAppleシリコンデバイスが 4年以上にわたって自身を誤って識別し続けています。Appleシリコンを正しく識別できる 唯一のAPIは navigator.userAgentData.getHighEntropyValues(["architecture"]) で、 これは "x86" ではなく "arm" を返します。

iPadOS 13以降はMacとして報告される

AppleがiPadOS 13を導入した際に「デスクトップ用Webサイトを表示」をデフォルトで 有効にしたため、Safariがデスクトップのユーザーエージェントとプラットフォームとして"MacIntel" を報告するようになりました — iPadであっても同様です。 FingerprintJSのようなフィンガープリンティングライブラリには修正ロジックが含まれており、navigator.platform"MacIntel" を返すが モバイルデバイスとしてタッチイベントが発生する場合、ライブラリは分類を iPadまたはiPhoneに戻します。この修正なしでは、すべてのモダンiPadが フィンガープリントデータでMacBookとして表示されます。

実世界でのnavigator.platformの利用者

広告ネットワークとトラッキング

行動ターゲティング広告プラットフォームは、navigator.platform を コンポーネントの一つとしてブラウザフィンガープリンティングを使用し、 サードパーティクッキーがブロックされた後も永続的なデバイス識別子を維持します。 プラットフォームはOSレベルのセグメンテーション(WindowsユーザーはmacOSユーザーと 異なる広告を受け取る)とクロスセッション識別子の安定性に貢献します。

不正検出プラットフォーム

Fingerprint(旧FingerprintJS)、Stripe Radar、Sift Scienceなどのサービスは、主に整合性チェックとしてnavigator.platform を使用します。Windowsマシンと主張している デバイスがLinuxのプラットフォーム値を示したり、同じユーザーアカウントの 認証済みセッション間でプラットフォーム値が変化したりすると、リスクシグナルが トリガーされます。GDPRの下での正当な使用の主張は、一般的に「不正防止」の 正当な利益を根拠とします。

ヘッドレスブラウザの検出

自動化スクレーパーやボットフレームワークは、偽装したユーザーエージェントと 一致するリアルな navigator.platform 値を設定することをよく怠ります。 Cloudflare Bot ManagementやAkamai Bot Managerなどのアンチボットプラットフォームは、 ボットスコアリングモデルの一シグナルとしてこの整合性を確認します。 存在しない、空の、または一致しないプラットフォーム文字列は、自動化の信頼性の 高い指標です。

A/Bテストとアナリティクス

アナリティクスダッシュボードは、ユーザーエクスペリエンスレポートのOS セグメンテーションに navigator.platform を使用します。これは 非トラッキングのユースケースで、プラットフォーム値は集計されており、 永続的な識別子の構築には使用されません。ただし、フィンガープリンティング スクリプトが使用するのと同じAPI呼び出しを使用してクライアント側で処理されます。

navigator.platform と navigator.userAgentData — モダンな代替手段

User-Agent Client Hints API navigator.userAgentData)は、Googleのユーザーエージェント削減 イニシアチブの一環として、Chrome 89(2021年)で導入されました。 新しいAPIはデータを低エントロピー(常に利用可能)と高エントロピー (明示的にリクエストが必要)に分離します:

// Low-entropy: always available, returns a clean enum value
navigator.userAgentData.platform;
// "macOS", "Windows", "Linux", "Android", "iOS"
// — no more "MacIntel", "Win32", "Linux x86_64"

// High-entropy: must explicitly request; website must justify need
navigator.userAgentData
  .getHighEntropyValues(["platform", "platformVersion", "architecture", "bitness"])
  .then(data => {
    console.log(data.platform);         // "macOS"
    console.log(data.platformVersion);  // "14.5.0" (internal version, not "Sonoma")
    console.log(data.architecture);     // "arm" ← finally correctly identifies Apple Silicon
    console.log(data.bitness);          // "64"
  });

// Fallback for browsers without userAgentData support (Firefox):
const platform = navigator?.userAgentData?.platform || navigator?.platform;

重要なアーキテクチャの変更点:architectureplatformVersion のような高エントロピー値は明示的な非同期呼び出しが 必要であり、ブラウザがノイズを適用したりユーザーにプロンプトを表示したりする 機会を与えます。Firefoxは2026年初頭時点でこのAPIのサポートが限られており、 その理由の一つは、レガシー文字列アプローチよりも構造化された、より容易に フィンガープリント可能なOS記述を提供するという懸念があるためです。

自身を保護する方法

navigator.platform の漏洩を防ぐことは、見かけよりも難しいです。 なぜなら、単純な偽装はしばしばあなたをより識別しにくくするのではなく、 より識別しやすくするからです。最も効果的なものから最も実用的なものへ ランク付けした選択肢を示します:

  • Torブラウザ(最強の保護): Torは同じOSカテゴリのすべての ユーザーで navigator.platform を標準化します — すべての Windowsユーザーが同じ値を報告し、すべてのmacOSユーザーが同じ値を報告します。 目標は、すべてのTorユーザーが同一に見える大きな匿名集合を作ることです。 代償はTorリレーネットワークを通じる低速ブラウジングです。
  • Firefoxと privacy.resistFingerprintingabout:config でこのフラグを有効にすると、Firefoxは複数の他の ナビゲータープロパティと同時に navigator.platform を偽装します。 ただし、この設定を有効にしているFirefoxユーザーは約0.48%のみで、 この設定自体がフィンガープリントとなり、有効にしていない99.52%の Firefoxユーザーと区別されます。結果としてより目立ってしまう可能性があります。
  • Braveブラウザ(日常使用に推奨): BraveのFarbling アプローチは、セッションごとおよびサイトごとに高エントロピーの フィンガープリンティングシグナルをランダム化します。navigator.platform 自体については、Braveは明らかな矛盾を 避けるために実際のプラットフォームと一致した値を報告しつつ、 フィンガープリンティングの大部分を担うキャンバスやWebGLなどの 高エントロピーシグナルを妨害します。
  • navigator.platform を単独で偽装しないこと:ユーザーエージェント文字列、WebGL GPU文字列、キャンバス出力も同時に 更新せずに navigator.platform だけを変更すると、 不正検出システムが即座に検出するシグナルの矛盾が生じます。 不完全な偽装は偽装なしよりも悪い — 自動化や意図的な回避者として マークされます。
  • 一貫したブラウザプロファイルを使用する:偽装ではなく、最も一般的なブラウザ設定(最も一般的なプラットフォーム 組み合わせであるWindows上のChrome)を使用して多数派プールに紛れ込む ことを推奨するプライバシー研究者もいます。"Win32" を報告するデバイスは、デスクトップブラウザの 約72%がその値を共有しており、珍しいLinuxやBSDの設定よりもはるかに 大きな匿名集合に属しています。
  • VPNの限界を理解する: VPNは可視IPアドレスを変更しますが、navigator.platform や他のブラウザプロパティには一切影響しません。 1つのトラッキングベクターを除去しつつ、すべてのフィンガープリンティング サーフェスをそのままにしておきます。 whatsmy.fyi で自分のすべての露出状況を確認してください。

navigator.platform は非推奨なのか?

答えは意図的に曖昧です。 WHATWG HTML仕様 には依然として navigator.platform が含まれており、 正式には非推奨ではありません。MDNは「推奨されない」「信頼性が低い」と マークしていますが、非推奨とは言い切っていません。mdn/contentwhatwg/html の両リポジトリの GitHubイシューでこのステータスが議論されましたが、解決には至っていません。

実用的な結論:navigator.platform は後方互換性のためにブラウザに 無期限に残り続けます — 1990年代からすべてのブラウザで"Netscape" を返し続けている navigator.appName と 同様です。多くのレガシースクリプトがそれに依存しているため、削除されることは 決してないでしょう。しかし、ウェブ開発者は正当なOS検出をnavigator.userAgentData.platform に移行すべきです。 MDNが navigator.platform の有効な文書化されたユースケースとして 認めているのは、ユーザーに表示する修飾キーシンボル( vsCtrl)の判定のみであり、新しいAPIはこれをより確実に行います。

よくある質問

AppleシリコンMacでnavigator.platformは何を返しますか?

IntelのMacと同じ値、"MacIntel" を返します。AppleとブラウザベンダーはAccuracyよりも 後方互換性を優先しました。すべてのM1、M2、M3、M4 Macは2020年から誤ったCPU アーキテクチャを報告し続けています。ブラウザからAppleシリコンを検出する 唯一の方法は、新しい navigator.userAgentData.getHighEntropyValues(["architecture"]) を 使用することで、これは正しく "arm" を返します。

ウェブサイトはnavigator.platformなしにOSを検出できますか?

はい、複数の補完的なチャネルを通じて:任意のJavaScriptが実行される前に サーバーに見える User-Agent リクエストヘッダー、 通常OSに固有のGPUドライバーを名指しするWebGL GPU文字列、 キャンバスレンダリングの違い(macOSのCore TextとWindowsのClearTypeと LinuxのFreeTypeは測定可能な異なるピクセル出力を生成します)、 そしてCSSの -webkit- プレフィックスサポートパターンがあります。navigator.platform をブロックするだけではOS検出を防げません。

クッキーのクリアでnavigator.platformはリセットされますか?

いいえ。navigator.platform はブラウザ起動時にOSから導出されます — クッキー、ローカルストレージ、またはクリアできるブラウザデータに 保存されているわけではありません。シークレットモードでも、新しいブラウザ プロファイルでも、完全なキャッシュのワイプ後でも同じ値です。 変更する唯一の方法は、異なるOSを使用するか、積極的に偽装するブラウザを 使用することです。

navigator.platform と navigator.userAgent の違いは何ですか?

navigator.platform は短く構造化されたOS識別子です。navigator.userAgent 文字列は、ブラウザ名、バージョン、OS名、 OSバージョン、レンダリングエンジン、歴史的な互換性トークンを、 単一の非構造化文字列に含むはるかに長い複合文字列です。 ユーザーエージェントはより多くのエントロピー(10〜15ビット)を含みますが、 ブラウザバージョン間でより可変性が高くなります。navigator.platform はバージョン間でより安定しており、 フィンガープリンティングにおいて補完的な役割を果たします。 プラットフォーム値はブラウザ更新でユーザーエージェント文字列が 変化しても変わりません。

iPadのプラットフォームがなぜ「MacIntel」と表示されることがあるのですか?

iPadOS 13(2019年リリース)で「デスクトップ用Webサイトを表示」機能が デフォルトで有効になりました。これにより、iPad上のSafariがデスクトップの ユーザーエージェントとプラットフォームとして "MacIntel" を 報告するようになり、"iPad" の代わりに使われるようになりました。 意図は、より大きなiPad画面にデスクトップ最適化されたコンテンツを 配信させることでした。副作用として、フィンガープリンティングシステムは プラットフォーム文字列を直接信頼するのではなく、タッチイベントサポート、 画面アスペクト比、WebKit APIなどの間接的なシグナルでiPadを検出する 必要が生じました。

navigator.platform は何ビットのエントロピーを提供しますか?

単独では約2〜4ビットです。なぜなら、実際のトラフィックの異なる値の数が 少ないためです(Win32はデスクトップブラウザの約72%を占め、MacIntelは約16%、 残りはLinuxの派生が分割しています)。珍しい値についてはエントロピーが 高くなります — "Linux armv7l" を報告するユーザーは はるかに小さな匿名集合にいます。キャンバスハッシュ、WebGLレンダラー、 画面解像度、タイムゾーン、ハードウェア同時実行数と組み合わせると、 複合フィンガープリントは通常20ビットを超え、100万のブラウザの中から あなたの身元を絞り込むのに十分です。

Firefoxのprivacy.resistFingerprintingはnavigator.platformを偽装しますか?

はい。about:config で有効にすると、Firefoxはnavigator.platform を、navigator.userAgentnavigator.appVersionnavigator.oscpunavigator.buildID にも影響するプロパティオーバーライドの 協調セットの一部として偽装します。偽装される値はプラットフォームによって 異なります — Firefoxは、キーボードショートカットの動作を壊さないよう、 Windowsでは妥当な偽のWindows 10値を、Macでは妥当な偽のmacOS値を報告します。 欠点:この設定を有効にしているFirefoxユーザーは約0.48%のみで、 それらのユーザーは異常なフラグ単独で明確に識別可能になります。

関連記事

IPアドレス・位置情報・プライバシースコアを今すぐ確認。

ゼロログ・ゼロトラッキング・外部API不使用。

今すぐ確認する →

関連記事

navigator.platformフィンガープリント — OS検出の仕組みと問題点 | whatsmy.fyi