Bagaimana cara mengidentifikasi komputer yang mengunjungi situs web saya secara unik?

184

Saya perlu mencari cara mengidentifikasi secara unik setiap komputer yang mengunjungi situs web yang saya buat. Adakah yang punya saran tentang cara mencapai ini?

Karena saya ingin solusi bekerja pada semua mesin dan semua browser (dengan alasan) saya mencoba untuk membuat solusi menggunakan javascript.

Cookie tidak akan berhasil.

Saya membutuhkan kemampuan untuk membuat panduan yang unik untuk komputer dan dapat diulang, dengan asumsi tidak ada perubahan perangkat keras yang terjadi pada komputer. Petunjuk yang saya pikirkan adalah mendapatkan MAC dari kartu jaringan dan informasi lain yang bersifat ini yang akan membuat mesin mengunjungi situs web.

itu penting
sumber
4
Anda tidak bisa mendapatkan mac dari kartu jaringan mereka - IP doens't berisi informasi itu, yang terbaik yang bisa Anda dapatkan adalah alamat IP gateway ISP mereka. Untuk beberapa ISP yang bisa sama untuk semua pengguna di kota tertentu.
Martin Beckett
1
Kenyataannya Anda tidak ingin pengguna dapat menipu itu. Jawabannya tentu saja ini tidak dapat dilakukan tanpa komponen pribadi Anda yang terpasang pada mesin pengguna.
AnthonyWJones
Alamat MAC mudah untuk spoof. Koneksi nirkabel kecil saya yang payah akan melewati MAC Anda, gantikan sendiri, atau gunakan yang Anda tentukan.
Kent Brewster
Ini tidak dapat dilakukan - cookie adalah pilihan terbaik Anda
Draemon
Silakan baca jawaban saya di halaman ini. Saya punya ide yang sangat bagus untuk masalah ini :)
Mahdi Jazini

Jawaban:

58

Orang-orang ini telah mengembangkan metode sidik jari untuk mengenali pengguna dengan tingkat akurasi yang tinggi:

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

Kami menyelidiki sejauh mana browser web modern tunduk pada "sidik jari perangkat" melalui versi dan informasi konfigurasi yang akan mereka kirimkan ke situs web berdasarkan permintaan. Kami menerapkan satu algoritma sidik jari yang mungkin, dan mengumpulkan sidik jari ini dari sejumlah besar browser yang mengunjungi sisi pengujian kami, panopticlick.eff.org. Kami mengamati bahwa distribusi sidik jari kami mengandung setidaknya 18,1 bit entropi, yang berarti bahwa jika kami memilih browser secara acak, paling baik kami berharap bahwa hanya satu dari 286.777 browser lain yang akan berbagi sidik jarinya. Di antara browser yang mendukung Flash atau Java, situasinya lebih buruk, dengan browser rata-rata membawa setidaknya 18,8 bit informasi pengidentifikasian. 94,2% browser dengan Flash atau Java unik dalam sampel kami.

Dengan mengamati pengunjung yang kembali, kami memperkirakan seberapa cepat sidik jari peramban dapat berubah seiring waktu. Dalam sampel kami, sidik jari berubah cukup cepat, tetapi bahkan heuristik sederhana biasanya dapat menebak kapan sidik jari adalah versi "upgrade" dari sidik jari peramban yang diamati sebelumnya, dengan 99,1% tebakan yang benar dan tingkat positif palsu hanya 0,86% .

Kami membahas ancaman privasi apa yang dimiliki sidik jari peramban dalam praktiknya, dan tindakan pencegahan apa yang mungkin tepat untuk mencegahnya. Ada tradeoff antara perlindungan terhadap sidik jari dan beberapa jenis debuggability, yang pada browser saat ini sangat memberatkan privasi. Secara paradoks, teknologi privasi anti-sidik jari dapat mengalahkan diri sendiri jika tidak digunakan oleh cukup banyak orang; kami menunjukkan bahwa beberapa tindakan privasi saat ini menjadi korban dari paradoks ini, tetapi yang lain tidak ...

Jonathan
sumber
14
Saya seorang pengembang, saya datang ke sini untuk mencari solusi cepat atau cuplikan kode kecil. Dokumen ini tidak menunjukkan bagaimana cara mengimplementasikannya. Saya ingin tahu bagaimana cara menerapkan ini sehingga saya dapat melacak pengguna unik untuk situs saya.
Oliver
10
@Liver Anda benar. Ini tidak memberi Anda jawaban di atas piring. Ini membutuhkan bacaan lebih lanjut, pemahaman tentang semua masalah yang terlibat dan mengapa snipet kode sederhana tidak akan pernah berfungsi sepenuhnya. Pengembang yang giat mungkin menulis perpustakaan yang melakukan semua kerja keras, dan memungkinkan orang yang mencari "solusi cepat" untuk mendapatkan manfaat di masa depan.
Jonathan
2
Jawabannya juga hanya untuk tautan. Ringkasan teknik yang dijelaskan dalam PDF akan dihargai jika PDF menjadi tidak tersedia.
Damian Yerrick
2
Lihat jawaban saya di sini untuk paket sumber terbuka dan cara mudah menerapkan sidik jari stackoverflow.com/a/47536192/3650835
KayakinKoder
Jadi saya lebih baik membuat "cookie" tangguh dengan angka besar acak: D
Luis Mauricio
49

pengantar

Saya tidak tahu apakah ada atau pernah ada cara untuk mengidentifikasi mesin secara unik menggunakan browser saja. Alasan utamanya adalah:

  • Anda harus menyimpan data di komputer pengguna. Data ini dapat dihapus oleh pengguna kapan saja. Kecuali jika Anda memiliki cara untuk membuat kembali data ini yang unik untuk setiap mesin maka perangkat Anda macet.
  • Validasi. Anda harus menjaga dari spoofing, pembajakan sesi, dll.

Bahkan jika ada cara untuk melacak komputer tanpa menggunakan cookie, selalu ada cara untuk mem-bypassnya dan perangkat lunak yang akan melakukan ini secara otomatis. Jika Anda benar-benar perlu melacak sesuatu berdasarkan komputer Anda harus menulis aplikasi asli (Apple Store / Android Store / Program Windows / dll).

Saya mungkin tidak dapat memberi Anda jawaban untuk pertanyaan yang Anda ajukan tetapi saya dapat menunjukkan kepada Anda bagaimana menerapkan pelacakan sesi. Dengan pelacakan sesi, Anda mencoba melacak sesi penelusuran alih-alih komputer mengunjungi situs Anda. Dengan melacak sesi, skema basis data Anda akan terlihat seperti ini:

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
  }, ...]

Keuntungan dari pelacakan berbasis sesi:

  1. Untuk pengguna yang masuk, Anda selalu dapat membuat id sesi yang sama dari pengguna username/ password/ email.
  2. Anda masih dapat melacak pengguna tamu menggunakan sessionID.
  3. Bahkan jika beberapa orang menggunakan komputer yang sama (yaitu cybercafe), Anda dapat melacaknya secara terpisah jika mereka masuk.

Kerugian dari pelacakan berbasis sesi:

  1. Sesi berdasarkan browser dan bukan berbasis komputer. Jika pengguna menggunakan 2 browser yang berbeda, itu akan menghasilkan 2 sesi yang berbeda. Jika ini masalah Anda bisa berhenti membaca di sini.
  2. Sesi kedaluwarsa jika pengguna tidak masuk. Jika pengguna tidak masuk, maka mereka akan menggunakan sesi tamu yang akan dibatalkan jika pengguna menghapus cookie dan cache browser.

Penerapan

Ada banyak cara untuk mengimplementasikan ini. Saya tidak berpikir saya bisa membahas semuanya, saya hanya akan daftar favorit saya yang akan membuat ini menjadi pendapat yang beralasan . Ingatlah itu.

Dasar-dasar

Saya akan melacak sesi dengan menggunakan apa yang dikenal sebagai cookie selamanya. Ini adalah data yang secara otomatis akan membuat ulang dirinya sendiri bahkan jika pengguna menghapus cookie atau memperbarui browser-nya. Namun itu tidak akan bertahan hidup pengguna menghapus cookie dan cache browsing mereka.

Untuk mengimplementasikan ini saya akan menggunakan mekanisme caching browser ( RFC ), WebStorage API ( MDN ) dan cookie browser ( RFC , Google Analytics ).

Hukum

Untuk memanfaatkan id pelacakan, Anda harus menambahkannya ke kebijakan privasi Anda dan ketentuan penggunaan Anda lebih disukai di bawah Sub-heading Tracking . Kami akan menggunakan kunci berikut pada keduanya document.cookiedan window.localStorage:

  • _ga : data Google Analytics
  • __utma : cookie pelacakan Google Analytics
  • sid : SessionID

Pastikan Anda menyertakan tautan ke kebijakan Privasi Anda dan ketentuan penggunaan pada semua halaman yang menggunakan pelacakan.

Di mana saya menyimpan data sesi saya?

Anda dapat menyimpan data sesi di basis data situs web atau di komputer pengguna. Karena saya biasanya bekerja di situs yang lebih kecil (biarkan lebih dari 10 ribu koneksi terus menerus) yang menggunakan aplikasi pihak ke-3 (Google Analytics / Clicky / dll) yang terbaik bagi saya untuk menyimpan data di komputer klien. Ini memiliki keuntungan sebagai berikut:

  1. Tidak ada pencarian basis data / overhead / beban / latensi / ruang / dll.
  2. Pengguna dapat menghapus data mereka kapan pun mereka mau tanpa perlu menulis email yang mengganggu saya.

dan kerugian:

  1. Data harus dienkripsi / didekripsi dan ditandatangani / diverifikasi yang menciptakan overhead CPU pada klien (tidak terlalu buruk) dan server (bah!).
  2. Data dihapus ketika pengguna menghapus cookie dan cache mereka. (Inilah yang benar-benar saya inginkan)
  3. Data tidak tersedia untuk analitik saat pengguna offline. (analytics hanya untuk pengguna yang sedang menjelajah)

UUIDS

  • BrowserID : Id unik yang dihasilkan dari string agen pengguna browser.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : Dihasilkan dari Alamat IP pengguna dan kunci sesi HTTPS. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : JavaScript sidik jari berdasarkan berdasarkan dimodifikasi fingerprint.js .FingerPrint.get()
  • SessionID : Kunci acak yang dihasilkan ketika pengguna ke-1 mengunjungi situs.BrowserID|ComputerID|randombytes(256)
  • GoogleID : Dihasilkan dari __utmacookie.getCookie(__utma).uniqueid

Mekanisme

Suatu hari saya menonton acara williams wendy dengan pacar saya dan benar-benar ngeri ketika pembawa acara menyarankan pemirsa untuk menghapus riwayat browser mereka setidaknya sebulan sekali. Menghapus riwayat browser biasanya memiliki efek sebagai berikut:

  1. Menghapus riwayat situs web yang dikunjungi.
  2. Menghapus cookie dan window.localStorage(aww man).

Sebagian besar browser modern membuat opsi ini tersedia tetapi takut bukan teman. Karena ada solusinya. Peramban memiliki mekanisme caching untuk menyimpan skrip / gambar dan hal lainnya. Biasanya bahkan jika kita menghapus riwayat kita, cache browser ini masih ada. Yang kita butuhkan adalah cara untuk menyimpan data kita di sini. Ada 2 metode untuk melakukan ini. Yang lebih baik adalah menggunakan gambar SVG dan menyimpan data kami di dalam tag-nya. Dengan cara ini data masih dapat diekstraksi bahkan jika JavaScript dinonaktifkan menggunakan flash. Namun karena itu agak rumit saya akan menunjukkan pendekatan lain yang menggunakan JSONP ( Wikipedia )

example.com/assets/js/tracking.js (sebenarnya 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);
}

Sekarang kita bisa mendapatkan kunci sesi kami kapan saja:

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

Bagaimana cara membuat tracking.js menempel di browser?

Kita dapat mencapai ini menggunakan header HTTP Cache-Control , Last-Modified, dan ETag . Kita dapat menggunakan nilai SessionIDas untuk header etag:

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

Last-Modifiedheader memberitahu browser bahwa file ini pada dasarnya tidak pernah dimodifikasi. Cache-Controlmemberi tahu proksi dan gateway untuk tidak men-cache dokumen tetapi memberitahu browser untuk menyimpannya selama 1 tahun.

Saat berikutnya browser meminta dokumen, itu akan mengirim If-Modified-Sincedan If-None-Matchheader. Kita dapat menggunakan ini untuk mengembalikan 304 Not Modifiedrespons.

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();
}

Sekarang setiap kali browser meminta tracking.jsserver kami akan merespons dengan 304 Not Modifiedhasil dan memaksakan eksekusi salinan lokal tracking.js.

Saya masih tidak mengerti. Jelaskan itu padaku

Mari kita anggap pengguna menghapus riwayat penjelajahan mereka dan menyegarkan halaman. Satu-satunya yang tersisa di komputer pengguna adalah salinan dari tracking.jscache browser. Ketika browser meminta, tracking.jsia menerima 304 Not Modifiedrespons yang menyebabkannya menjalankan versi pertama yang tracking.jsditerima. tracking.jsmengeksekusi dan mengembalikan SessionIDyang telah dihapus.

Validasi

Misalkan Haxor X mencuri cookie pelanggan kami saat mereka masih login. Bagaimana kita melindungi mereka? Kriptografi dan sidik jari Browser untuk menyelamatkan. Ingat definisi asli kami SessionIDadalah:

BrowserID|ComputerID|randomBytes(256)

Kami dapat mengubah ini menjadi:

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

Mana hk = sign(Timestamp|BrowserID|ComputerID, serverKey).

Sekarang kita dapat memvalidasi SessionIDmenggunakan algoritma berikut:

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; 

Agar serangan Haxor berhasil, mereka harus:

  1. Sudah sama ComputerID. Itu berarti mereka harus memiliki penyedia ISP yang sama dengan korban (Tricky). Ini akan memberi korban kita peluang untuk mengambil tindakan hukum di negara mereka sendiri. Haxor juga harus mendapatkan kunci sesi HTTPS dari korban (Keras).
  2. Sudah sama BrowserID. Siapa pun dapat menipu string User-Agent (Annoying).
  3. Mampu membuat palsu mereka sendiri SessionID(Sangat Keras). Serangan volume tidak akan berhasil karena kami menggunakan cap waktu untuk menghasilkan kunci enkripsi / penandatanganan, jadi pada dasarnya seperti menghasilkan kunci baru untuk setiap sesi. Selain itu kami mengenkripsi byte acak sehingga serangan kamus sederhana juga keluar dari pertanyaan.

Kami dapat meningkatkan validasi dengan meneruskan GoogleIDdan FingerprintID(melalui ajax atau bidang tersembunyi) dan mencocokkannya.

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;
Walter
sumber
1
ngomong-ngomong, ini jawaban yang indah. Begitu banyak informasi. Saya terkejut Anda tidak memiliki lebih banyak suara positif. Jujur saya tidak percaya teknik dengan svgs dan jsonp ada, tetapi harus. Apakah tidak ada perpustakaan yang mundur ke teknik seperti itu ketika cookie / localStorage / sessionStorage dinonaktifkan?
faceyspacey.com
Juga, saya bertanya-tanya apakah ada versi lanjutan dari ini untuk hanya menggunakan file caching tracking.js Anda (atau beberapa file seperti itu) untuk menggunakannya sebagai dasarnya penyimpanan / cookie lokal, yaitu untuk mengingat banyak data. Idenya adalah untuk perpustakaan untuk memiliki metode seperti storageFacade.setItemdan setFem setItem . 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 storageFacade.getItem . And then a dari semua diff yang dibuat selama sesi yang secara otomatis dibuat sesekali.
faceyspacey.com
Jika manifes hanya dibuat sesekali, pada dasarnya itu akan membatasi jumlah manifes yang dibuat. Dan kemudian dalam javascript Anda bisa mencoba untuk meminta semua manifes yang mungkin dibuat, dan kemudian menggunakan yang terbaru untuk membangun kembali keadaan dari snapshot berbeda. Jika kita hanya memiliki perbedaan, mungkin ada ratusan atau ribuan dan itu mungkin merupakan masalah kinerja untuk mencoba mengambil semuanya sampai satu gagal. Yaitu Anda mengambil diff atau manifes secara bertahap: manifes-1.js, manifes-2.js, dll, hingga salah satu gagal (karena tidak ada). Yang berarti Anda memiliki semua manifes (atau
perbedaan
@ faceyspacey.com Maaf tidak ada perpustakaan. Anda harus kode dan terus memperbarui solusi kustom Anda sendiri. Pikirkan tentang itu. Segera setelah Anda mengembangkan lib untuk ini semua add blocker / browser / etc akan segera mengatasinya. Satu-satunya alasan ini berhasil adalah karena ia bergantung pada fitur browser inti yang sangat penting sehingga mereka tidak akan menghapus / menonaktifkan: CACHING. Saya terus kehilangan login dan kata sandi saya. Dan karena saya tidak mengajukan banyak pertanyaan lagi, saya tidak perlu menjawab banyak sehingga saya dapat meninggalkan karunia dengan reputasi. Saya hanya melihat ini dan menyadari tidak ada jawaban nyata.
Walter
30

Tidak mungkin mengidentifikasi komputer yang mengakses situs web tanpa kerjasama pemiliknya. Namun, jika mereka mengizinkan Anda, Anda dapat menyimpan cookie untuk mengidentifikasi mesin ketika mengunjungi lagi situs Anda. Kuncinya adalah, pengunjung memegang kendali; mereka dapat menghapus cookie dan muncul sebagai pengunjung baru kapan saja mereka mau.

erickson
sumber
7
Jika dia mengunjungi situs Anda dengan 3 browser berbeda, maka ia akan memiliki 3 cookie berbeda karena cookie tidak dibagikan di antara aplikasi. Lebih jauh, jika dia menggunakan DHCP daripada alamat IP statis, dia mungkin tidak akan memiliki alamat IP yang sama untuk komputernya lama.
JohnnySoftware
2
Iya dan tidak. Sidik jari peramban mengidentifikasi profil peramban dengan tingkat probabilitas tinggi, tetapi itu bukan identifikasi satu-ke-satu yang dicari dalam pertanyaan ini. Ini juga cukup sederhana (tapi mungkin tidak mudah ) bagi pengguna yang cerdas untuk menghindari secara sengaja jika mereka mau.
erickson
30

Kemungkinan menggunakan flash cookies :

  • Ketersediaan di mana-mana (95 persen pengunjung mungkin akan memiliki flash)
  • Anda dapat menyimpan lebih banyak data per cookie (hingga 100 KB)
  • Dibagikan di seluruh peramban, jadi lebih mungkin mengidentifikasi mesin secara unik
  • Menghapus cookie browser tidak menghapus cookie flash.

Anda harus membuat film flash kecil (tersembunyi) untuk membaca dan menulisnya.

Apa pun rute yang Anda pilih, pastikan pengguna Anda memilih untuk dilacak, jika tidak, Anda melanggar privasi mereka dan menjadi salah satu dari orang jahat.

Joeri Sebrechts
sumber
5
Banyak pengguna menggunakan Flashblock. Flash akan diaktifkan dari pengguna dengan klik jika dia ingin melihatnya.
Horcrux7
3
Ada metode untuk menghapus cookie, tetapi mereka di luar rata-rata pengguna. Ada beberapa halaman di situs web Adobe untuk melihat dan menghapus LSO (Local Shared Object en.wikipedia.org/wiki/Local_Shared_Object ) meskipun untuk pengguna Firefox add-on Keberatan adalah metode termudah untuk menghapusnya
Sam Hasler
Saya pikir ini adalah salah satu solusi terbaik. Youtube, Google dll. Menggunakan LSO untuk melawan penyalahgunaan.
Uku Loskit
4
Cookie flash dengan mudah dihapus seperti cookie HTTP dalam versi modern dari Firefox dan Chrome: Wikipedia :Adobe 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
Situasi telah berubah dalam sembilan tahun terakhir. Saat ini, 95 persen pengguna bahkan tidak di desktop, dan seluler tidak pernah benar-benar memeluk Adobe Flash Player.
Damian Yerrick
21

Anda mungkin ingin mencoba menetapkan ID unik di evercookie (ini akan bekerja lintas browser, lihat FAQ mereka): http://samy.pl/evercookie/

Ada juga perusahaan bernama ThreatMetrix yang digunakan oleh banyak perusahaan besar untuk menyelesaikan masalah ini: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Mereka cukup mahal dan beberapa produk mereka yang lain tidak terlalu bagus, tetapi id perangkat mereka berfungsi dengan baik.

Akhirnya, ada implementasi jquery open source dari ide panopticlick ini: https://github.com/carlo/jquery-browser-fingerprint Ini terlihat setengah matang saat ini tetapi dapat diperluas.

Semoga ini bisa membantu!

Brian Armstrong
sumber
+1 - Brian - Informasi hebat! Ini semua terbukti sangat berguna. Terima kasih. Tambahkan informasi lebih banyak jika Anda sudah tidak belajar lagi sejak itu.
Ben O
1
Mengenai evercookie. Sudah mencoba dengan Opera. Atur cookie, lalu hapus semua histori dari Opera, lalu tutup Opera, buka lagi klik Click to rediscover cookiesdan lihat null atau undefined. Jadi ini tidak berhasil untuk saya
Andris
Mencoba halaman sampel dengan mode iOS Safari Private dan Desktop Chrome incognito, cookie tidak dapat diambil setelah browser restart.
Morio
20

Ada metode populer yang disebut sidik jari kanvas, yang dijelaskan dalam artikel ilmiah ini: Web Tidak Pernah Menghemat: Mekanisme Pelacakan Persisten di Alam Liar . Setelah Anda mulai mencarinya, Anda akan terkejut betapa seringnya digunakan. Metode ini menciptakan sidik jari yang unik, yang konsisten untuk setiap kombinasi browser / perangkat keras.

Artikel ini juga mengulas metode pelacakan gigih lainnya, seperti evercookies, respawning http dan Flash cookies, dan sinkronisasi cookie.

Info lebih lanjut tentang sidik jari kanvas di sini:

Per Dicari Aronsson
sumber
1
jadi jika dua perangkat identik (komputer batch yang sama, os yang sama, browser yang sama), sidik jari sama, kan?
xiaoyu2er
Pertanyaan sebenarnya di sini adalah apakah perpustakaan javascript saya dapat memasukkan kode saya untuk menggunakan ini. Membaca banyak teori tidak memecahkan masalah yang harus diselesaikan dalam 60 menit ke depan.
Thanasis Ioannidis
11

Hanya ada sedikit informasi yang bisa Anda dapatkan melalui koneksi HTTP.

  1. IP - Tetapi seperti yang orang lain katakan, ini tidak diperbaiki untuk banyak orang, jika tidak sebagian besar pengguna Internet karena kebijakan alokasi dinamis ISP mereka.

  2. Useragent String - Hampir semua browser mengirim jenis browser apa saja dengan setiap permintaan. Namun, ini dapat diatur oleh pengguna di banyak browser saat ini.

  3. Kumpulan bidang permintaan - Ada bidang lain yang dikirim bersama setiap permintaan, seperti penyandian yang didukung, dll. Ini, jika digunakan dalam agregat dapat membantu mengidentifikasi mesin pengguna, tetapi sekali lagi bergantung pada browser dan dapat diubah.

  4. Cookie - Menetapkan cookie adalah cara lain untuk mengidentifikasi mesin, atau lebih khusus browser pada mesin, tetapi seperti yang dikatakan orang lain, ini dapat dihapus, atau dimatikan oleh pengguna, dan hanya berlaku pada browser, bukan mesin.

Jadi, respons yang benar adalah bahwa Anda tidak dapat mencapai apa yang Anda jalani hanya melalui protokol HTTP over IP. Namun, menggunakan kombinasi cookie, serta IP, dan bidang dalam permintaan HTTP, Anda memiliki peluang bagus untuk menebak, semacam, mesin apa itu. Pengguna cenderung menggunakan hanya satu browser, dan seringkali dari satu mesin, jadi ini mungkin cukup dapat diandalkan, tetapi ini akan bervariasi tergantung pada audiens ... teknisi lebih cenderung mengacaukan hal ini, dan menggunakan lebih banyak mesin / browser. Selain itu, ini bahkan dapat digabungkan dengan beberapa upaya untuk melakukan geo-lokasi IP, dan menggunakan data itu juga. Tetapi bagaimanapun juga, tidak ada solusi yang akan benar setiap saat.

cdeszaq
sumber
10

Ada kekurangan dengan pendekatan cookie dan non-cookie. Tetapi jika Anda bisa memaafkan kekurangan dari pendekatan cookie, inilah sebuah ide.

Jika Anda sudah menggunakan Google Analytics di situs Anda, maka Anda tidak perlu menulis kode untuk melacak pengguna unik sendiri. Google Analytics melakukan itu untuk Anda melalui nilai __utmacookie, seperti yang dijelaskan dalam dokumentasi Google . Dan dengan menggunakan kembali nilai ini Anda tidak membuat payload cookie tambahan, yang memiliki manfaat efisiensi dengan permintaan halaman.

Dan Anda dapat menulis beberapa kode dengan cukup mudah untuk mengakses nilai itu, atau menggunakan fungsi skrip ini getUniqueId() .

Steve Wortham
sumber
Apakah saya akan mendapatkan id yang sama menggunakan getUniqueId()browser yang berbeda di mesin yang sama?
Ankur Akvaliya
8

Karena dengan solusi sebelumnya, cookie adalah metode yang baik, perlu diketahui bahwa mereka mengidentifikasi browser . Jika saya mengunjungi situs web di Firefox dan kemudian di Internet Explorer, cookie akan disimpan untuk kedua upaya secara terpisah. Beberapa pengguna juga menonaktifkan cookie (tetapi lebih banyak orang menonaktifkan JavaScript).

Metode lain yang perlu dipertimbangkan adalah identifikasi IP dan nama host (perlu diketahui bahwa ini dapat bervariasi untuk pengguna IP dial-up / non-statis, AOL juga menggunakan selimut IP). Namun karena ini hanya mengidentifikasi jaringan, ini mungkin tidak berfungsi sebaik cookie.

Ross
sumber
Poin bagus dengan alamat IP yang mengidentifikasi titik akses ke jaringan - dengan NAT, mungkin ada seluruh negara yang tersembunyi di balik satu alamat IP dan Anda tidak akan menjadi lebih bijak. Dengan kekurangan alamat IPv4, Anda masih akan melihat perusahaan atau sekolah / universitas yang cukup besar berbagi satu alamat IP untuk lalu lintas Internet keluar.
Piskvor meninggalkan gedung
6

Saran untuk menggunakan cookie, satu-satunya set atribut pengidentifikasi yang tersedia untuk diinterogasi terkandung dalam header permintaan HTTP. Jadi dimungkinkan untuk menggunakan beberapa himpunan bagian dari ini untuk membuat pengidentifikasi unik semu untuk agen pengguna (yaitu, browser). Lebih lanjut, sebagian besar informasi ini mungkin sudah masuk dalam apa yang disebut "log akses" perangkat lunak server web Anda secara default dan, jika tidak, dapat dengan mudah dikonfigurasi untuk melakukannya. Kemudian, sebuah utlity dapat dikembangkan yang hanya memindai isi log ini, membuat sidik jaridari setiap permintaan yang terdiri dari, katakanlah, alamat IP dan string Agen Pengguna, dll. Semakin banyak data yang tersedia, bahkan termasuk konten cookie tertentu, menambah kualitas keunikan sidik jari ini. Meskipun, seperti yang telah dinyatakan oleh banyak orang lainnya, protokol HTTP tidak membuat ini 100% sangat mudah - yang terbaik hanya bisa menjadi indikator yang cukup baik.

Danny Whitt
sumber
6

Ketika saya menggunakan mesin yang belum pernah mengunjungi situs web perbankan online saya, saya diminta untuk otentikasi tambahan. kemudian, jika saya kembali untuk kedua kalinya ke situs perbankan online saya tidak akan diminta otentikasi tambahan ... saya menghapus semua cookie di IE dan masuk kembali ke situs perbankan online saya sepenuhnya berharap untuk ditanyai pertanyaan otentikasi lagi. saya terkejut saya tidak diminta. Bukankah ini membuat orang percaya bahwa bank melakukan semacam penandaan pc yang tidak melibatkan cookie?

Ini adalah jenis otentikasi yang cukup umum digunakan oleh bank.

Katakanlah Anda sedang mengakses situs web bank Anda melalui example-isp.com. Pertama kali Anda di sana, Anda akan diminta kata sandi, serta otentikasi tambahan. Setelah Anda lulus, bank tahu bahwa pengguna "yang penting" diautentikasi untuk mengakses situs melalui example-isp.com.

Di masa depan, itu tidak akan meminta otentikasi tambahan (di luar kata sandi Anda) ketika Anda mengakses situs melalui example-isp.com. Jika Anda mencoba mengakses bank melalui another-isp.com, bank akan melalui rutin yang sama lagi.

Jadi untuk meringkas, apa yang mengidentifikasi bank adalah ISP dan / atau netblock Anda, berdasarkan alamat IP Anda. Jelas tidak semua pengguna di ISP Anda adalah Anda, itulah sebabnya bank masih meminta kata sandi Anda.

Pernahkah Anda memiliki panggilan perusahaan kartu kredit untuk memverifikasi bahwa semuanya OK ketika Anda menggunakan kartu kredit di negara lain? Konsep yang sama.

Anirvan
sumber
4

Sungguh, apa yang ingin Anda lakukan tidak dapat dilakukan karena protokol tidak memungkinkan untuk ini. Jika IP statis digunakan secara universal maka Anda mungkin dapat melakukannya. Mereka tidak, jadi Anda tidak bisa.

Jika Anda benar-benar ingin mengidentifikasi orang , minta mereka masuk.

Karena mereka mungkin akan berpindah ke berbagai halaman di situs web Anda, Anda perlu cara untuk melacaknya saat mereka bergerak.

Selama mereka masuk, dan Anda melacak sesi mereka di dalam situs Anda melalui cookie / tautan-parameter / suar / apa pun, Anda dapat yakin bahwa mereka menggunakan komputer yang sama selama waktu itu.

Pada akhirnya, tidak benar untuk mengatakan ini memberitahu Anda komputer mana yang mereka gunakan jika pengguna Anda tidak menggunakan jaringan lokal Anda sendiri dan tidak memiliki alamat IP statis.

Jika apa yang ingin Anda lakukan dilakukan dengan kerjasama pengguna dan hanya ada satu pengguna per cookie dan mereka menggunakan satu browser web, cukup gunakan cookie.

JohnnySoftware
sumber
3

Cookie tidak akan berguna untuk menentukan pengunjung unik. Seorang pengguna dapat menghapus cookie dan menyegarkan kembali situs - ia kemudian digolongkan sebagai pengguna baru lagi.

Saya berpikir bahwa cara terbaik untuk melakukan ini adalah dengan mengimplementasikan solusi sisi server (karena Anda akan memerlukan tempat untuk menyimpan data Anda). Bergantung pada kompleksitas kebutuhan Anda untuk data tersebut, Anda perlu menentukan apa yang digolongkan sebagai kunjungan unik. Metode yang masuk akal adalah dengan memungkinkan alamat IP untuk kembali pada hari berikutnya dan diberi kunjungan unik. Beberapa kunjungan dari satu alamat IP dalam satu hari tidak boleh dianggap sebagai unik.

Menggunakan PHP, misalnya, sepele untuk mendapatkan alamat IP pengunjung, dan menyimpannya dalam file teks (atau database sql).

Solusi sisi server akan bekerja pada semua mesin, karena Anda akan melacak pengguna ketika ia pertama kali memuat situs Anda. Jangan gunakan javascript, karena itu dimaksudkan untuk skrip sisi klien, ditambah pengguna mungkin telah menonaktifkannya dalam hal apa pun.

Semoga itu bisa membantu.

berbeda
sumber
4
Saya dan istri saya menjelajah dari empat komputer berbeda di belakang firewall NAT di rumah. Kami terlihat memiliki IP yang sama, jadi menurut skema Anda, kami muncul sebagai pengguna yang sama.
Adam Ness
Bagaimana jika di mysql untuk menulis variabel tambahan (disebutkan di sini panopticlick.eff.org/browser-uniqueness.pdf )? Jadi alamat ip akan sama, tetapi beberapa karakteristik lain mungkin berbeda.
Andris
3

Karena saya ingin solusi bekerja pada semua mesin dan semua browser (dengan alasan) saya mencoba untuk membuat solusi menggunakan javascript.

Bukankah itu alasan yang sangat bagus untuk tidak menggunakan javascript?

Seperti yang orang lain katakan - cookie mungkin adalah pilihan terbaik Anda - hanya perlu menyadari keterbatasannya.

Draemon
sumber
3

Anda dapat menggunakan sidik jarijs2

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 
})

Setelah itu Anda dapat memeriksa semua pengguna Anda terhadap yang ada dan memeriksa kesamaan JSON, jadi bahkan jika sidik jari mereka bermutasi, Anda masih dapat melacak mereka

Toolkit
sumber
2

Saya kira putusannya adalah saya tidak dapat secara unik mengidentifikasi komputer yang mengunjungi situs web saya.

Saya punya pertanyaan berikut. Ketika saya menggunakan mesin yang belum pernah mengunjungi situs web perbankan online saya, saya diminta untuk otentikasi tambahan. kemudian, jika saya kembali untuk kedua kalinya ke situs perbankan online saya tidak akan diminta otentikasi tambahan. membaca jawaban untuk pertanyaan saya saya memutuskan itu harus melibatkan cookie. oleh karena itu, saya menghapus semua cookie di IE dan masuk kembali ke situs perbankan online saya sepenuhnya berharap untuk ditanyai pertanyaan otentikasi lagi. saya terkejut saya tidak diminta. Bukankah ini membuat orang percaya bahwa bank melakukan semacam penandaan pc yang tidak melibatkan cookie?

lebih lanjut, setelah banyak googling hari ini saya menemukan perusahaan berikut yang mengklaim menjual solusi yang mengidentifikasi mesin unik yang mengunjungi situs web. http://www.the41.com/products.asp .

Saya menghargai semua informasi yang baik jika Anda dapat memperjelas lebih lanjut informasi yang saling bertentangan ini yang saya temukan saya akan sangat menghargainya.

itu penting
sumber
Berdasarkan ini: the41.com/download/... Sepertinya solusi mereka adalah membuat pengguna mengunduh perangkat lunak yang menciptakan pengidentifikasi unik berdasarkan mesin dan mengikatnya ke beberapa kredensial login.
mmacaulay
Seperti yang sudah disebutkan, Anda tidak mengesampingkan bank Anda menggunakan cookie Flash. Cara menghapus cookie Flash dan diskusi lainnya tentang masalah ini: tips.vlaurie.com/2007/10/24/…
micahwittman
Tebakan saya: Bank mungkin percaya bahwa Anda adalah Anda jika Anda (1) tahu nama pengguna Anda, (2) tahu kata sandi Anda, dan (3a) memiliki cookie mereka, atau (3b) berasal dari alamat IP yang sudah mereka miliki sebelumnya. terkait dengan Anda.
Zack Peterson
2

Saya akan melakukan ini menggunakan kombinasi cookie dan cookie flash. Buat GUID dan simpan dalam cookie. Jika cookie tidak ada, cobalah untuk membacanya dari cookie flash. Jika masih belum ditemukan, buat dan tuliskan ke cookie flash. Dengan cara ini Anda dapat berbagi GUID yang sama di seluruh browser.

Eric Hogue
sumber
1

Saya pikir cookie mungkin apa yang Anda cari; ini adalah cara sebagian besar situs web mengidentifikasi pengunjung secara unik.

Steve
sumber
0

Dengan asumsi Anda tidak ingin pengguna memegang kendali, Anda tidak bisa. Web tidak berfungsi seperti itu, yang terbaik yang bisa Anda harapkan adalah beberapa heuristik.

Jika ini merupakan opsi untuk memaksa pengunjung Anda menginstal beberapa perangkat lunak dan menggunakan TCPA, Anda mungkin dapat melakukan sesuatu.

John Nilsson
sumber
0

Posting saya mungkin bukan solusi, tetapi saya bisa memberikan contoh, di mana fitur ini telah diterapkan.

Jika Anda mengunjungi halaman pendaftaran www.supertorrents.orguntuk pertama kalinya dari komputer Anda, tidak apa-apa. Tetapi jika Anda me-refresh halaman atau membuka halaman lagi, itu mengidentifikasi Anda sebelumnya telah mengunjungi halaman. Keindahan nyata datang ke sini - mengidentifikasi bahkan jika Anda menginstal ulang Windows atau OS lainnya.

Saya membaca bahwa mereka menyimpan ID CPU. Walaupun saya tidak dapat menemukan bagaimana mereka melakukannya, saya sangat meragukannya, dan mereka mungkin menggunakan alamat MAC untuk melakukannya.

Saya pasti akan berbagi jika saya menemukan cara melakukannya.

Tuan Programmer
sumber
www.supertorrents.org sudah mati
Toolkit
0

Sebuah tipuan:

  1. Buat 2 Halaman Registrasi:

    Halaman Pendaftaran Pertama: tanpa email atau pemeriksaan keamanan (hanya dengan nama pengguna dan kata sandi)

    Halaman Pendaftaran Kedua: dengan tingkat keamanan tinggi (permintaan verifikasi email dan gambar keamanan, dll.)

  2. Untuk kepuasan pelanggan, dan pendaftaran yang mudah, halaman registrasi standar harus menjadi (Halaman Pendaftaran Pertama) tetapi di (Halaman Pendaftaran Pertama) ada batasan tersembunyi. Ini Pembatasan IP. Jika IP mencoba mendaftar untuk kedua kalinya, (misalnya kurang dari 1 jam) alih-alih menampilkan halaman blokir. Anda dapat menampilkan (Halaman Registrasi Kedua) secara otomatis.

  3. dalam (Halaman Pendaftaran Pertama) Anda dapat mengatur (misalnya: memblokir 2 upaya dari 1 ip hanya 1 jam atau 24 jam) dan setelah (misalnya) 1 jam, Anda dapat membuka akses dari ip itu secara otomatis

Harap dicatat: (Halaman Registrasi Pertama) dan (Halaman Registrasi Kedua) tidak boleh di halaman terpisah. Anda hanya membuat 1 halaman. (misalnya: register.php) dan buatlah cerdas untuk beralih antara Gaya PHP Pertama dan Gaya PHP Kedua

Mahdi Jazini
sumber
Mahdi Jazini. Semua benar tetapi pertanyaan saya adalah bagaimana Anda mengidentifikasi alamat IP mesin klien. Terima kasih.
JENKINS J