Webサイトにアクセスするコンピューターを一意に識別するにはどうすればよいですか?


184

作成しているWebサイトにアクセスする各コンピューターを一意に識別する方法を見つける必要があります。これを達成する方法について何かアドバイスはありますか?

ソリューションがすべてのマシンとすべてのブラウザーで(理由の範囲内で)動作するようにしたいので、JavaScriptを使用してソリューションを作成しようとしています。

クッキーはしません。

コンピューターにハードウェアの変更が発生していない場合、基本的にコンピューターに固有で繰り返し可能なGUIDを作成する機能が必要です。私が考えている方向性は、ネットワークカードのMACと、Webサイトにアクセスするマシンを識別するこの種のその他の情報を取得することです。


4
あなたは彼らのネットワークカードのMACを得ることができません-IPはその情報を含んでいません、あなたが得ることができる最も良いものは彼らのISPゲートウェイのIPアドレスです。特定の都市のすべてのユーザーで同じである可能性がある一部のISPの場合。
マーティンベケット

1
ユーザーがそれを偽装できるようにしたくないという事実。答えは、もちろん、これはユーザーのマシンにインストールされたいくつかの特権コンポーネントなしでは実行できません。
AnthonyWJones 2008年

MACアドレスは、なりすましが非常に簡単です。私の不器用な小さなワイヤレス接続は、MACを通過するか、MACを置き換えるか、指定したものを使用します。
ケントブリュースター

これを行うことはできません-クッキーが最善の策です
ドラえもん'10 / 10/20

このページで私の答えを読んでください。私はこの問題について非常に良い考えを持っています:)
Mahdi Jazini

回答:


58

これらの人々は、高レベルの精度でユーザーを認識するための指紋法を開発しました:

https://panopticlick.eff.org/static/browser-uniqueness.pdf

最新のWebブラウザーが、要求に応じてWebサイトに送信するバージョンおよび構成情報を介して、「デバイスフィンガープリント」の影響を受ける度合いを調査します。1つの可能なフィンガープリントアルゴリズムを実装し、テスト側であるpanopticlick.eff.orgにアクセスしたブラウザーの多数のサンプルからこれらのフィンガープリントを収集しました 。指紋の分布には少なくとも18.1ビットのエントロピーが含まれていることがわかります。つまり、ランダムにブラウザを選択した場合、最高で他の286,777のブラウザのみがその指紋を共有すると予想されます。FlashまたはJavaをサポートするブラウザーの中で状況はさらに悪く、平均的なブラウザーは少なくとも18.8ビットの識別情報を保持しています。FlashまたはJavaを搭載したブラウザの94.2%は、サンプルで一意でした。

再訪問者を観察することにより、ブラウザーのフィンガープリントが時間の経過とともにどの程度急速に変化するかを推定します。私たちのサンプルでは、​​指紋はかなり急速に変化しましたが、指紋が以前に観察されたブラウザの指紋の「アップグレードされた」バージョンである場合、通常、簡単なヒューリスティックでさえ推測することができ、99.1%の推測は正しく、偽陽性率はわずか0.86%でした。 。

プライバシーの脅威であるブラウザのフィンガープリントが実際にもたらすものと、それを防ぐためにどのような対策が適切かについて説明します。フィンガープリント可能性に対する保護と特定の種類のデバッグ可能性の間にはトレードオフがあり、現在のブラウザーではプライバシーに対して重く重み付けされています。逆説的に言えば、指紋対策のプライバシー技術は、十分な数の人々によって使用されない場合、自滅する可能性があります。現在、いくつかのプライバシー対策がこのパラドックスの犠牲になっていることを示していますが、他のプライバシー対策はそうではありません...


14
私は開発者です。簡単な解決策または小さなコードスニペットを探すためにここに来ました。このドキュメントでは、その実装方法は示していません。これを実装してサイトのユニークユーザーを追跡できるようにしたいのですが。
オリバー

10
@オリバーあなたは正しいです。これは皿の上であなたに答えを与えません。さらに、関連するすべての問題を読み、理解し、単純なコードスニペットが完全に機能する可能性が低い理由を理解する必要があります。進取的な開発者は、すべての大変な作業を行うライブラリを作成し、「迅速な解決策」を探している人々が将来的に利益を得られるようにするかもしれません。
ジョナサン

2
答えもリンクのみです。PDFに記載されている技術の概要は、PDFが利用できなくなった場合に備えていただければ幸いです。
Damian Yerrick 2017

2
フィンガープリントを実装するためのオープンソースパッケージと簡単っぽい道のためにここに私の答えを参照してくださいstackoverflow.com/a/47536192/3650835
KayakinKoder

だから私はランダムな大きな数字で弾力性のある「クッキー」を作る方がいい:D
Luis Mauricio

49

前書き

ブラウザだけを使用してマシンを一意に識別する方法があるかどうか、またはこれからもそうなるかはわかりません。主な理由は次のとおりです。

  • ユーザーのコンピューターにデータを保存する必要があります。このデータは、ユーザーがいつでも削除できます。あなたが立ち往生しているマシンごとに一意であるこのデータを再作成する方法がない限り。
  • 検証。なりすまし、セッションの乗っ取りなどを防ぐ必要があります。

Cookieを使用せずにコンピューターを追跡する方法がある場合でも、それをバイパスする方法と、これを自動的に実行するソフトウェアは常に存在します。コンピューターに基づいて何かを本当に追跡する必要がある場合は、ネイティブアプリケーション(Apple Store / Android Store / Windows Program /など)を作成する必要があります。

お伺いした質問にはお答えできない場合がありますが、セッショントラッキングの実装方法をお見せすることはできます。セッショントラッキングを使用すると、サイトにアクセスするコンピューターではなく、ブラウジングセッションをトラッキングしようとします。セッションを追跡すると、データベーススキーマは次のようになります。

sesssion:
  sessionID: string
  // Global session data goes here

  computers: [{
     BrowserID: string
     ComputerID: string
     FingerprintID: string
     userID: string
     authToken: string
     ipAddresses: ["203.525....", "203.525...", ...]
     // Computer session data goes here
  }, ...]

セッションベースの追跡の利点:

  1. ログインユーザーのために、あなたは常にユーザーから同じセッションIDを生成することができますusername/ password/ email
  2. を使用して、引き続きゲストユーザを追跡できますsessionID
  3. 複数のユーザーが同じコンピューター(例:サイバーカフェ)を使用している場合でも、彼らがログインしていれば、個別に追跡できます。

セッションベースの追跡の欠点:

  1. セッションはブラウザベースであり、コンピュータベースではありません。ユーザーが2つの異なるブラウザを使用すると、2つの異なるセッションが発生します。これが問題の場合は、ここで読むのをやめることができます。
  2. ユーザーがログインしていない場合、セッションは期限切れになります。ユーザーがログインしていない場合、ユーザーはゲストセッションを使用します。ゲストセッションは、ユーザーがCookieとブラウザキャッシュを削除すると無効になります。

実装

これを実装する方法はたくさんあります。私はそれらをカバーすることができないと思います私がこれを意見の多い答えにする私のお気に入りをリストします。それを覚えておいてください。

基本

永久クッキーと呼ばれるものを使用してセッションを追跡します。これは、ユーザーがCookieを削除したり、ブラウザを更新したりしても、自動的に再作成されるデータです。ただし、ユーザーがCookieとブラウジングキャッシュの両方を削除しても、それは存続しません。

これを実装するには、ブラウザーのキャッシュメカニズム(RFC)、WebStorage API(MDN)、およびブラウザーのCookie(RFCGoogle Analytics)を使用します。

法的

追跡IDを利用するためには、好ましくは、サブ見出しの下に、あなたのプライバシーポリシーと利用のあなたの条件の両方に追加する必要があります追跡。我々は両方の上の次のキーを使用しますdocument.cookiewindow.localStorage

  • _ga:Google Analyticsデータ
  • __utma:Google AnalyticsトラッキングCookie
  • sid:SessionID

プライバシーポリシーへのリンクと、トラッキングを使用するすべてのページに利用規約を必ず含めてください。

セッションデータはどこに保存しますか?

セッションデータは、Webサイトデータベースまたはユーザーのコンピューターに保存できます。私は通常、サードパーティのアプリケーション(Google Analytics / Clickyなど)を使用する小規模なサイト(連続接続が1万を超えない)で作業しているので、クライアントコンピューターにデータを保存するのが最善です。これには次の利点があります。

  1. データベース検索/オーバーヘッド/負荷/待ち時間/スペースなどはありません。
  2. ユーザーは、迷惑メールを書く必要なく、いつでも自分のデータを削除できます。

と欠点:

  1. データは暗号化/復号化および署名/検証される必要があり、クライアント(それほど悪くない)およびサーバー(bah!)でCPUオーバーヘッドが発生します。
  2. ユーザーがCookieとキャッシュを削除すると、データが削除されます。(これは私が本当に欲しいものです)
  3. ユーザーがオフラインになると、データを分析に使用できなくなります。(現在閲覧しているユーザーのみの分析)

UUIDS

  • BrowserID:ブラウザのユーザーエージェント文字列から生成された一意のID。Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID:ユーザーのIPアドレスとHTTPSセッションキーから生成されます。 getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID:変更されたfinger.jsに基づくJavaScriptベースのフィンガープリントFingerPrint.get()
  • SessionID:ユーザーが最初にサイトにアクセスしたときに生成されたランダムキー。BrowserID|ComputerID|randombytes(256)
  • GoogleID__utmaCookie から生成されます。getCookie(__utma).uniqueid

機構

先日、彼女と一緒にウェンディウィリアムズのショーを見ていたとき、ホストが視聴者に少なくとも月に1回はブラウザの履歴を削除するように勧めたとき、完全に恐怖になりました。ブラウザの履歴を削除すると、通常、次のような影響があります。

  1. 訪問したウェブサイトの履歴を削除します。
  2. cookieとwindow.localStorage(aww man)を削除します。

最新のブラウザのほとんどは、このオプションをすぐに利用できますが、友達を恐れません。解決策があるからです。ブラウザには、スクリプトや画像などを保存するためのキャッシュメカニズムがあります。通常、履歴を削除しても、このブラウザキャッシュは残ります。ここにデータを保存する方法が必要です。これを行うには2つの方法があります。より良い方法は、SVG画像を使用して、データをタグ内に格納することです。この方法では、Flashを使用してJavaScriptが無効になっている場合でも、データを抽出できます。しかし、それは少し複雑なので、JSONP(Wikipedia)を使用する他のアプローチを示します

example.com/assets/js/tracking.js(実際にはtracking.php)

var now = new Date();
var window.__sid = "SessionID"; // Server generated

setCookie("sid", window.__sid, now.setFullYear(now.getFullYear() + 1, now.getMonth(), now.getDate() - 1));

if( "localStorage" in window ) {
  window.localStorage.setItem("sid", window.__sid);
}

これで、いつでもセッションキーを取得できます。

window.__sid || window.localStorage.getItem("sid") || getCookie("sid") || ""

ブラウザでtracking.jsを固定するにはどうすればよいですか?

Cache-ControlLast-Modified、およびETag HTTPヘッダーを使用してこれを実現できます。SessionIDetagヘッダーの値としてas を使用できます。

setHeaders({
  "ETag": SessionID,
  "Last-Modified": new Date(0).toUTCString(),
  "Cache-Control": "private, max-age=31536000, s-max-age=31536000, must-revalidate"
})

Last-Modifiedヘッダーは、このファイルが基本的に変更されないことをブラウザに伝えます。Cache-Controlプロキシとゲートウェイにドキュメントをキャッシュしないように指示しますが、ブラウザに1年間キャッシュするよう指示します。

次回ブラウザーがドキュメントを要求するときに、ヘッダーIf-Modified-SinceIf-None-Matchヘッダーが送信されます。これらを使用して304 Not Modified応答を返すことができます。

example.com/assets/js/tracking.php

$sid = getHeader("If-None-Match") ?: getHeader("if-none-match") ?: getHeader("IF-NONE-MATCH") ?: ""; 
$ifModifiedSince = hasHeader("If-Modified-Since") ?: hasHeader("if-modified-since") ?: hasHeader("IF-MODIFIED-SINCE");

if( validateSession($sid) ) {
  if( sessionExists($sid) ) {
    continueSession($sid);
    send304();
  } else {
    startSession($sid);
    send304();
  }
} else if( $ifModifiedSince ) {
  send304();
} else {
  startSession();
  send200();
}

これで、ブラウザがリクエストtracking.jsするたびにサーバーが304 Not Modified結果で応答し、のローカルコピーを強制的に実行しますtracking.js

まだわかりません。説明して

ユーザーが閲覧履歴をクリアしてページを更新するとします。ユーザーのコンピューターに残っているのはtracking.js、ブラウザーキャッシュのコピーだけです。ブラウザがリクエストするtracking.jsと、ブラウザ304 Not Modifiedは最初のバージョンを実行するように応答を受け取りtracking.jsます。削除されtracking.jsSessionIDを実行して復元します。

検証

Haxor Xがまだログインしている間に顧客のCookieを盗んだとしましょう。どのようにして保護しますか?暗号化とブラウザのフィンガープリントで救出。の元の定義SessionIDは次のとおりでした。

BrowserID|ComputerID|randomBytes(256)

これを次のように変更できます。

Timestamp|BrowserID|ComputerID|encrypt(randomBytes(256), hk)|sign(Timestamp|BrowserID|ComputerID|randomBytes(256), hk)

どこhk = sign(Timestamp|BrowserID|ComputerID, serverKey)

これでSessionID、次のアルゴリズムを使用して検証できます。

if( getTimestamp($sid) is older than 1 year ) return false;
if( getBrowserID($sid) !== createBrowserID($_Request, $_Server) ) return false;
if( getComputerID($sid) !== createComputerID($_Request, $_Server) return false;

$hk = sign(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid), $SERVER["key"]);

if( !verify(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid) + decrypt(getRandomBytes($sid), hk), getSignature($sid), $hk) ) return false;

return true; 

ハクソールの攻撃が機能するためには、次のことが必要です。

  1. 同じComputerIDです。つまり、被害者(Tricky)と同じISPプロバイダーが必要です。これにより、被害者は自国で訴訟を起こす機会が与えられます。Haxorはまた、被害者(ハード)からHTTPSセッションキーを取得する必要があります。
  2. 同じBrowserIDです。誰でもユーザーエージェント文字列を偽装できます(迷惑)。
  3. 自分の偽物SessionID(非常に難しい)を作成できる。タイムスタンプを使用して暗号化/署名鍵を生成するため、ボリューム攻撃は機能しません。基本的には、セッションごとに新しい鍵を生成するようなものです。その上、ランダムなバイトを暗号化するため、単純な辞書攻撃も問題外です。

転送GoogleIDおよびFingerprintID(ajaxまたは非表示フィールドを介して)検証を改善し、それらと照合できます。

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;

1
ちなみにこれは素晴らしい答えです。たくさんの情報。賛成票がこれ以上ないことに驚いています。私は正直に言って、svgsとjsonpを使った手法が存在するとは信じられませんが、そうである必要があります。cookie / localStorage / sessionStorageが無効になっているときに、このような手法にフォールバックするライブラリはありませんか?
faceyspacey.com 2017年

また、キャッシュされたtracking.jsファイル(または複数のそのようなファイル)を使用して、本質的にlocalStorage / cookiesとして使用する、つまり大量のデータを記憶するための、これの高度なバージョンがあるのだろうか。ライブラリには、セッション中に作成されるすべてのdiffのstorageFacade.setItemstorageFacade.getItem . And it tries to use localStorage, but fallsback to your technique when disabled. ..Perhaps the way it works is via a single file for "diffs" i.e. each time you call setItem . And then a manifest`のようなメソッドが時々自動的に作成されるようにするという考えがあります。
faceyspacey.com 2017年

マニフェストがたまにしか作成されなかった場合、基本的には作成されるマニフェストの数が制限されます。そして、後でJavaScriptで、作成されたすべての可能なマニフェストを要求し、最新のマニフェストを使用して、差分スナップショットから状態を再構築することができます。差分がある場合、数百または数千になる可能性があり、1つが失敗するまですべてを取得しようとすると、パフォーマンスの問題になる可能性があります。つまり、差分またはマニフェストを段階的にフェッチします(manifest-1.js、manifest-2.jsなど)。失敗するまで(存在しないため)。つまり、すべてのマニフェスト(または差分)があることを意味します
faceyspacey.com '10年

@ faceyspacey.comライブラリは申し訳ありません。独自のカスタムソリューションをコーディングし、常に更新する必要があります。それについて考えてください。このためのlibを開発するとすぐに、すべてのadd blockers / browsers / etcがすぐにそれに対抗します。これが機能する唯一の理由は、それが単に削除/無効にしない非常に重要なコアブラウザー機能に依存しているためです:キャッシュ。ログインとパスワードを何度も失います。そして、私はもう多くの質問をしないので、評判のある賞金を残すことができるように、私は多くに答える必要はありません。私はこれを見て、本当の答えがないことに気づきました。
Walter

30

所有者の協力なしにWebサイトにアクセスするコンピューターを特定することはできません。ただし、許可されている場合は、Cookieを保存して、マシンが再びサイトにアクセスしたときにマシンを識別できます。重要なのは、訪問者がコントロールできることです。Cookieを削除して、いつでも新しいビジターとして表示できます。


7
3つの異なるブラウザでサイトにアクセスすると、アプリ間でCookieが共有されないため、3つの異なるCookieが表示されます。さらに、静的IPアドレスではなくDHCPを使用している場合、彼のコンピュータには同じIPアドレスが長期間存在しないでしょう。
JohnnySoftware

2
はいといいえ。ブラウザフィンガープリントは、高い確率でブラウザプロファイルを識別しますが、この質問で求められる絶対的な1対1の識別ではありません。また、かなり単純な(おそらくではありません簡単に彼らが望むなら、意図的に回避するために精通したユーザのため)。
エリクソン2016年

30

可能性はフラッシュクッキーを使用しています:

  • ユビキタス可用性(訪問者の95%はおそらくフラッシュを持っているでしょう)
  • Cookieごとにより多くのデータを保存できます(最大100 KB)
  • ブラウザ間で共有されるため、マシンを一意に識別する可能性が高くなります
  • ブラウザのCookieをクリアしても、Flash Cookieは削除されません。

それらを読み書きするには、小さな(非表示の)Flashムービーを作成する必要があります。

どのルートを選択する場合でも、ユーザーが追跡されるようにINを選択していることを確認してください。


5
多くのユーザーがFlashblockを使用しています。Flashは、ユーザーが見たい場合、クリックするだけでアクティブになります。
Horcrux7 2008年

3
クッキーを削除する方法はいくつかありますが、それらは平均的なユーザーを超えています。AdobeのWebサイトには、LSO(ローカル共有オブジェクトen.wikipedia.org/wiki/Local_Shared_Object)を表示および削除するためのページがありますが、Firefoxユーザーにとっては、Objectionアドオンが最も簡単な削除方法です
Sam Hasler

これは最良の解決策の1つだと思います。Youtube、Googleなどは虐待と戦うためにLSOを使用しています。
Uku Loskit

4
最新バージョンのFirefoxおよびChromeでは、Flash CookieはHTTP Cookieと同じくらい簡単に削除されます。WikipediaAdobe announced that Flash Player 10.3 enables Mozilla Firefox 4 and "future releases of Apple Safari and Google Chrome" to delete local shared objects,[11] so since version 4, Firefox treats LSOs the same way as HTTP cookies - deletion rules that previously applied only to HTTP cookies now also apply to LSOs.
JoJo

4
過去9年間で状況は変化しました。今日では、ユーザーの95%がデスクトップを使用しておらず、モバイルがAdobe Flash Playerを実際に採用したことはありません。
Damian Yerrick 2017

21

evercookieに一意のIDを設定してみてください(ブラウザー間で動作します。FAQを参照してください):http ://samy.pl/evercookie/

この問題を解決するために大企業の多くで使用されてThreatMetrixという会社もあります: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ 彼らは非常に高価とのいくつかであります他の製品はあまり良くありませんが、デバイスIDはうまく機能します。

最後に、panopticlickのアイデアのこのオープンソースのjqueryの実装があります: https://github.com/carlo/jquery-browser-fingerprint それはかなりの半分今焼い見えますが、時に拡張することができます。

それが役に立てば幸い!


+ 1-ブライアン-すばらしい情報!これはすべて非常に有用であることが判明しています。ありがとうございました。それ以降学習しない場合は、さらに情報を追加してください。
Ben O

1
エバークッキーについて。Operaを試してみました。Cookieを設定し、Operaからすべての履歴を削除してから、Operaを閉じ、再度開いてクリックするClick to rediscover cookiesと、nullまたは未定義のいずれかが表示されます。したがって、これは私にとっては機能しません
Andris

iOS SafariプライベートモードとデスクトップChromeシークレットモードでサンプルページを試しましたが、ブラウザの再起動後にCookieを取得できません。
モリオ

20

この科学記事で説明されている、キャンバスフィンガープリントと呼ばれる一般的な方法があります。Webは決して忘れない:野生の永続的な追跡メカニズム。あなたがそれを探し始めると、それがどれほど頻繁に使用されるかに驚かれることでしょう。この方法では、ブラウザとハードウェアの組み合わせごとに一貫した一意のフィンガープリントが作成されます。

この記事では、evercookies、httpおよびFlash cookieの再生成、cookieの同期など、他の永続的な追跡方法についても説明します。

キャンバスフィンガープリントの詳細はこちら:


1
つまり、2つのデバイスが同一(同じバッチコンピュータ、同じOS、同じブラウザ)である場合、フィンガープリントは同じですよね?
xiaoyu2er 2017年

ここでの実際の問題は、これを使用するためにコードにドロップできるJavaScriptライブラリであるということです。大量の理論を読んでも、60分以内に解決しなければならない問題は解決されません。
Thanasis Ioannidis

11

HTTP接続を介して取得できる情報はごくわずかです。

  1. IP-しかし、他の人が言ったように、ISPの動的割り当てポリシーのために、ほとんどではないにしても多くのインターネットユーザーにとってこれは修正されていません。

  2. Useragent文字列-ほとんどすべてのブラウザが、すべてのリクエストでどのような種類のブラウザかを送信します。ただし、これは現在多くのブラウザでユーザーが設定できます。

  3. リクエストフィールドのコレクション-サポートされているエンコーディングなど、各リクエストで送信される他のフィールドがあります。これらを集約で使用すると、ユーザーのマシンのIDの作成に役立ちますが、やはりブラウザに依存し、変更できます。

  4. Cookie-Cookieの設定は、マシン、またはより具体的にはマシン上のブラウザーを識別する別の方法ですが、他の人が言ったように、これらはユーザーが削除またはオフにすることができ、ブラウザーではなくブラウザーでのみ適用できます機械。

したがって、正しい応答は、HTTP over IPプロトコルだけでは実現できることを実現できないということです。ただし、CookieとIPの組み合わせ、およびHTTPリクエストのフィールドを使用すると、それがどのマシンであるかを推測できる可能性が高くなります。ユーザーはブラウザを1つだけ使用する傾向があり、多くの場合1台のマシンから使用するため、これはかなり安心できるかもしれませんが、これはオーディエンスによって異なります... さらに、これは、IPを地理的に特定し、そのデータを使用する試みと組み合わせることもできます。しかし、いずれにせよ、常に正しい解決策はありません。


10

Cookieと非Cookieの両方のアプローチに欠陥があります。しかし、Cookieアプローチの欠点を許せば、ここにアイデアがあります。

サイトで既にGoogle Analyticsを使用している場合は、独自のユーザーを追跡するためのコードを記述する必要はありません。Google Analyticsは__utmaGoogleのドキュメントで説明されているように、Cookie値を介してそれを行います。また、この値を再利用することで、追加のCookieペイロードを作成することはありません。これにより、ページリクエストの効率が向上します。

そして、その値にアクセスするために簡単にコードを記述したり、このスクリプトの getUniqueId()関数を使用したりできます。


getUniqueId()同じマシンの異なるブラウザーで同じIDを使用しますか?
Ankur Akvaliya 2018

8

以前のソリューションと同様に、Cookieは優れた方法ですが、ブラウザを識別することに注意してください。FirefoxでWebサイトにアクセスし、次にInternet Explorerでアクセスした場合、Cookieは両方の試行に対して別々に保存されます。一部のユーザーはCookieも無効にします(ただし、JavaScriptを無効にするユーザーが増えます)。

考慮すべきもう1つの方法は、IPとホスト名の識別です(これらはダイヤルアップ/非静的IPユーザーによって異なる可能性があることに注意してください。AOLもブランケットIPを使用します)。ただし、これはネットワークを識別するだけなので、Cookieと同様に機能しない可能性があります。


ネットワークへのアクセスポイントを特定するIPアドレスの利点-NATを使用すると、全体が単一のIPアドレスの背後に隠れてしまう可能性があり、賢くはありません。IPv4アドレスが不足しても、かなり大規模な企業や学校/大学では、アウトバウンドインターネットトラフィック用に単一のIPアドレスを共有します。
Piskvorが

6

Cookieを使用するための提案は別として、問い合わせに使用できる識別属性の唯一の包括的なセットは、HTTPリクエストヘッダーに含まれています。したがって、これらのサブセットを使用して、ユーザーエージェント(つまり、ブラウザ)の疑似一意識別子を作成することができます。さらに、この情報のほとんどは、デフォルトでWebサーバーソフトウェアのいわゆる「アクセスログ」にすでに記録されている可能性があり、そうでない場合は簡単に構成できます。次に、このログの内容を単にスキャンして指紋を作成するユーティリティを開発できますたとえば、IPアドレスやユーザーエージェント文字列などで構成される各リクエストのデータです。特定のCookieのコンテンツも含めて、利用可能なデータが多いほど、このフィンガープリントの一意性の品質が向上します。他の多くの人がすでに述べたように、HTTPプロトコルはこれを100%完全に保証するわけではありません-せいぜいかなり良い指標にすぎません。


6

オンラインバンキングのWebサイトにアクセスしたことがないマシンを使用すると、追加の認証を求められます。次に、もう一度オンラインバンキングサイトに戻った場合、追加の認証を求められません... IEですべてのCookieを削除し、認証の質問をもう一度受けることを期待してオンラインバンキングサイトに再度ログオンしました。驚いたことに、私は尋ねられませんでした。これは、銀行がCookieを含まないPCのタグ付けを行っていると信じるように導きませんか?

これは、銀行が使用するかなり一般的なタイプの認証です。

example-isp.comから銀行のWebサイトにアクセスしているとします。初めてそこにいるときは、パスワードと追加の認証を求められます。合格すると、銀行はユーザー「thatisvaliant」がexample-isp.com経由でサイトにアクセスするために認証されていることを認識します。

将来的には、example-isp.com経由でサイトにアクセスするときに、(パスワードを超えて)追加の認証を要求することはありません。another-isp.com経由で銀行にアクセスしようとすると、銀行は同じルーチンを再度実行します。

要約すると、銀行が識別するのは、IPアドレスに基づくISPやネットブロックです。明らかに、ISPのすべてのユーザーがあなたであるわけではありません。そのため、銀行は依然としてパスワードを要求します。

別の国でクレジットカードを使用する場合、問題がないことを確認するためにクレジットカード会社に電話をかけたことがありますか。同じ概念。


4

実際には、プロトコルがこれを許可していないため、実行したいことを実行できません。静的IPが広く使用されている場合は、それを実行できる可能性があります。彼らはそうではないので、あなたはできません。

本当にを特定したい場合は、ログインしてもらいます。

彼らはおそらくあなたのウェブサイトの別のページに移動するので、彼らが動き回るのを追跡する方法が必要です。

彼らがログインしており、cookies / link-parameters / beacons / whateverを介してサイト内で彼らのセッションを追跡している限り、彼らがその間同じコンピュータを使用していることはかなり確実です。

最終的に、ユーザーが自分のローカルネットワークを使用しておらず、静的IPアドレスを持っていない場合に、どのコンピューターを使用しているのかがわかるとは正しくありません。

ユーザーの協力を得てやりたいことが行われていて、Cookieごとにユーザーが1人だけで、ユーザーが単一のWebブラウザーを使用している場合は、Cookieを使用します。


3

Cookieは、ユニークビジターを特定するのに役立ちません。ユーザーはCookieをクリアしてサイトを更新できます-その後、彼は再び新しいユーザーとして分類されます。

これを実行する最善の方法は、サーバー側のソリューションを実装することです(データを格納するためにどこかが必要になるため)。そのようなデータに対するニーズの複雑さに応じて、固有の訪問として分類されるものを決定する必要があります。賢明な方法は、IPアドレスが翌日に戻って固有の訪問を許可されるようにすることです。1日の1つのIPアドレスからの複数のアクセスは、ユニークとしてカウントされるべきではありません。

たとえば、PHPを使用すると、訪問者のIPアドレスを取得してテキストファイル(またはSQLデータベース)に保存するのは簡単です。

ユーザーが最初にサイトをロードしたときにユーザーを追跡するため、サーバー側のソリューションはすべてのマシンで機能します。javascriptはクライアント側のスクリプティング用であるため使用しないでください。さらに、ユーザーはいずれの場合もJavaScriptを無効にしている可能性があります。

お役に立てば幸いです。


4
妻と私は、自宅のNATファイアウォールの背後にある4台の異なるコンピューターから閲覧しています。私たちは同じIPを持つものとして表示されるため、あなたのスキームでは同じユーザーとして表示されます。
Adam Ness、

mysqlで追加の変数(ここでpanopticlick.eff.org/browser-uniqueness.pdfに記述されている)を書き込む場合はどうなりますか?したがって、IPアドレスは同じになりますが、他のいくつかの特性は異なる場合があります。
アンドリス2015

3

ソリューションがすべてのマシンとすべてのブラウザーで(理由の範囲内で)動作するようにしたいので、JavaScriptを使用してソリューションを作成しようとしています。

それがjavascriptを使わないのは本当に良い理由ではないでしょうか?

他の人が言ったように-クッキーはおそらくあなたの最良のオプションです-制限に注意してください。


3

あなたはprintingjs2を使うことができます

new Fingerprint2().get(function(result, components) {
  console.log(result) // a hash, representing your device fingerprint
  console.log(components) // an array of FP components
  //submit hash and JSON object to the server 
})

その後、既存のユーザーに対してすべてのユーザーをチェックし、JSONの類似性をチェックできます。そのため、指紋が変化した場合でも、ユーザーを追跡できます。


2

私の判断では、自分のWebサイトにアクセスしているコンピューターをプログラムで一意に特定することはできません。

次の質問があります。オンラインバンキングのWebサイトにアクセスしたことがないマシンを使用すると、追加の認証を求められます。その後、もう一度オンラインバンキングサイトに戻ると、追加の認証を求められません。私の質問への回答を読んで、私はそれがクッキーに関係しているに違いないと決めました。そのため、IEですべてのCookieを削除し、オンラインバンキングサイトに再度ログオンしました。認証の質問が再度行われることを期待しています。驚いたことに、私は尋ねられませんでした。これは、銀行がCookieを含まないPCのタグ付けを行っていると信じるように導きませんか?

さらに、今日のグーグル検索の結果、Webサイトにアクセスするマシンを一意に識別するソリューションを販売すると主張している次の会社を見つけました。http://www.the41.com/products.asp

私が見つけたこの矛盾する情報をさらに明確にすることができれば、私はすべての良い情報に感謝します。


これに基づいて: the41.com/download/… 彼らの解決策は、ユーザーがマシンに基づいて一意の識別子を作成し、それをいくつかのログイン資格情報に関連付けるソフトウェアの一部をダウンロードすることです。
mmacaulay 2008年

すでに述べたように、フラッシュCookieを使用して銀行を除外していません。Flash Cookieをクリアする方法と、この問題に関するその他のディスカッション:tips.vlaurie.com/2007/10/24/…– micahwittman '23
10/23

私の推測:(1)ユーザー名を知っている、(2)パスワードを知っている、(3a)Cookieを持っている、または(3b)以前に取得したIPアドレスからのものである場合、銀行はおそらくあなたを信頼しているあなたに関連付けられています。
Zack Peterson、

2

私はCookieとFlash Cookieを組み合わせて使用​​します。GUIDを作成してCookieに保存します。Cookieが存在しない場合は、Flash Cookieから読み取ってみてください。それでも見つからない場合は、作成してフラッシュCookieに書き込みます。これにより、ブラウザ間で同じGUIDを共有できます。


1

クッキーはあなたが探しているものかもしれません。これは、ほとんどのWebサイトが訪問者を一意に識別する方法です。


0

ユーザーを制御したくない場合は、制御できません。Webはそのようには機能しません。あなたが期待できる最高のものは、いくつかのヒューリスティックです。

訪問者にいくつかのソフトウェアをインストールさせ、TCPAを使用させるオプションである場合、何かを引き出すことができるかもしれません。


0

私の投稿は解決策ではないかもしれませんが、この機能が実装されている例を提供できます。

www.supertorrents.orgコンピュータから初めてのサインアップページにアクセスする場合は、問題ありません。ただし、ページを更新したり、ページを再度開いたりすると、以前にそのページにアクセスしたことがわかります。本当の美しさはここに来ます-あなたがWindowsや他のOSを再インストールしたとしてもそれは識別します。

CPU IDが格納されていることをどこかで読みました。彼らがどうやってそれをやっているのかはわかりませんでしたが、私はそれを真剣に疑っています。

方法がわかれば、ぜひ共有します。


www.supertorrents.orgは終了しました
ツールキット

0

トリック:

  1. 2つの登録ページを作成します。

    最初の登録ページ:メールやセキュリティチェックなし(ユーザー名とパスワードのみ)

    2番目の登録ページ:セキュリティレベルが高い(メールの確認要求とセキュリティイメージなど)

  2. 顧客満足と簡単な登録のために、デフォルトの登録ページは(最初の登録ページ)である必要がありますが、 (最初の登録ページ)には隠れた制限があります。それはIP制限です。IPがブロックページを表示する代わりに、2回目(たとえば1時間未満)に登録しようとした場合。(2番目の登録ページ)を 自動的に表示できます。

  3. (最初の登録ページ)(:ちょうど1時間または24時間の1つのIPからブロック2つの試みを、たとえば)と(例えば)1時間後に、自動的にそのIPからのアクセスを開くことができます設定することができます

注意:(最初の登録ページ)(2番目の登録ページ)を別々のページに配置しないでください。あなただけの1ページを作ります。(例:register.php)そして、最初のPHPスタイルと2番目のPHPスタイルを簡単に切り替えることができます


Mahdi Jazini。すべてが正しいですが、私の質問は、クライアントマシンのIPアドレスをどのように識別するかです。ありがとうございます。
ジェンキンスJ 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.