Web sitemi ziyaret eden bilgisayarları nasıl benzersiz bir şekilde tanımlayabilirim?


184

Oluşturduğum web sitesini ziyaret eden her bilgisayarı benzersiz bir şekilde tanımlamanın bir yolunu bulmam gerekiyor. Bunu başarmak için herhangi bir tavsiye var mı?

Çözümün tüm makinelerde ve tüm tarayıcılarda çalışmasını istediğim için (sebeple) Javascript kullanarak bir çözüm oluşturmaya çalışıyorum.

Çerezler yapmaz.

Temelde bilgisayara hiçbir donanım değişikliği olmamış olduğunu varsayarak, bir bilgisayara özgü ve tekrarlanabilir bir rehber oluşturma yeteneğine ihtiyacım var. Düşünüyorum yönleri ağ kartı MAC ve web sitesini ziyaret makineyi kimliği bu doğa bu diğer bilgileri alıyorsanız.


4
Ağ kartlarının mac'unu alamazsınız - IP bu bilgileri içermez, alabileceğiniz en iyi şey ISS ağ geçidinin IP adresidir. Belirli bir şehirdeki tüm kullanıcılar için aynı olabilecek bazı İSS'ler için.
Martin Beckett

1
Kullanıcının parodi yapmasını istemediğiniz gerçeği. Cevap, elbette bu, kullanıcı makinenize bazı ayrıcalıklı bileşenleriniz yüklenmeden yapılamaz.
AnthonyWJones

MAC adreslerini taklit etmek son derece kolaydır. Benim küçük kablosuz bağlantım MAC'inizden geçecek, kendi yerine geçecek veya belirttiğinizi kullanacaktır.
Kent Brewster

Bu yapılamaz - çerezler en iyi bahistir
Draemon

Lütfen bu sayfada cevabımı okuyun. Bu sorun için çok iyi bir fikrim var :)
Mehdi Jazini

Yanıtlar:


58

Bu kişiler, yüksek doğruluk seviyesine sahip bir kullanıcıyı tanımak için bir parmak izi yöntemi geliştirdi:

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

Modern web tarayıcılarının istek üzerine web sitelerine iletecekleri sürüm ve yapılandırma bilgileri aracılığıyla “cihaz parmak izine” maruz kalma derecesini araştırıyoruz. Olası bir parmak izi algoritması uyguladık ve bu parmak izlerini test tarafımızı ziyaret eden geniş bir tarayıcı örneğinden topladık, panopticlick.eff.org. Parmak izimizin dağılımının en az 18,1 bit entropi içerdiğini gözlemliyoruz, yani rastgele bir tarayıcı seçersek en iyi 286,777 tarayıcıdan sadece birinin parmak izini paylaşmasını bekliyoruz. Flash veya Java'yı destekleyen tarayıcılar arasında durum daha kötüdür, ortalama tarayıcı en az 18,8 bit tanımlama bilgisi taşır. Flash veya Java kullanan tarayıcıların% 94,2'si örneğimizde benzersizdi.

Geri gelen ziyaretçileri gözlemleyerek, tarayıcı parmak izlerinin zaman içinde ne kadar hızlı değişebileceğini tahmin ediyoruz. Örneğimizde parmak izleri oldukça hızlı bir şekilde değişti, ancak basit bir sezgisel tarama bile genellikle bir parmak izinin daha önce gözlenen bir tarayıcının parmak izinin "yükseltilmiş" bir sürümü olduğunu tahmin edebiliyordu, tahminlerin% 99,1'i doğru ve sadece% 0,86 yanlış pozitif oranı .

Uygulamada gizlilik tehdidi parmak izi uygulamasının ne olduğunu ve bunu önlemek için hangi önlemlerin uygun olabileceğini tartışıyoruz. Parmak izlenebilirliğine karşı koruma ile mevcut tarayıcılarda gizliliğe karşı ağırlıklı olarak ağırlıklandırılmış belirli hata ayıklama türleri arasında bir denge vardır. Paradoksal olarak, parmak izi bırakmayan gizlilik teknolojileri yeterli sayıda kişi tarafından kullanılmazsa kendini yenebilir; bazı gizlilik önlemlerinin şu anda bu paradoksun kurbanı olduğunu, ancak bazılarının ...


14
Ben bir geliştiriciyim, hızlı bir çözüm veya küçük bir kod snippet'i aramak için buraya geldim. Bu belge, nasıl uygulanacağını göstermemektedir. Sitem için benzersiz kullanıcıları izleyebilmek için bunu nasıl uygulayacağımı bilmek istiyorum.
Oliver

10
@Oliver Doğru. Bu size bir plaka üzerinde cevap vermez. Daha fazla okuma, ilgili tüm konuların anlaşılması ve basit bir kod snippet'inin neden tamamen çalışma olasılığı düşük olduğunu gerektirir. Girişimci bir geliştirici, tüm zor işleri yapan bir kütüphane yazabilir ve "hızlı bir çözüm" arayan kişilerin gelecekte yararlanmalarını sağlayabilir.
Jonathan

2
Cevap aynı zamanda sadece bağlantılıdır. PDF'nin kullanılamaması durumunda PDF'de açıklanan tekniklerin bir özeti takdir edilecektir.
Damian Yerrick

2
Açık kaynaklı bir paket ve parmak izi uygulamasının kolay bir yolu için cevabımı buradan görebilirsiniz stackoverflow.com/a/47536192/3650835
KayakinKoder

Bu yüzden rastgele büyük bir sayı ile esnek bir "kurabiye" yapsam iyi olur: D
Luis Mauricio

50

Giriş

Tek başına bir tarayıcı kullanarak makineleri benzersiz bir şekilde tanımlamanın bir yolu olup olmayacağını bilmiyorum. Ana nedenler:

  • Verileri kullanıcıların bilgisayarına kaydetmeniz gerekir. Bu veriler kullanıcı tarafından her zaman silinebilir. Her bir makine için benzersiz olan bu verileri yeniden oluşturmanın bir yolu yoksa, sıkışıp kalmazsınız.
  • Doğrulama. Kimlik sahtekarlığına, oturum ele geçirmeye vb. Karşı korunmanız gerekir.

Bir bilgisayarı çerez kullanmadan izlemenin yolları olsa bile, her zaman onu ve bunu otomatik olarak yapacak yazılımı atlamanın bir yolu olacaktır. Bilgisayara dayalı bir şeyi gerçekten izlemeniz gerekiyorsa, yerel bir uygulama (Apple Store / Android Store / Windows Programı / vb.) Yazmanız gerekir.

Sorduğunuz soruya cevap veremeyebilirim, ancak oturum izlemeyi nasıl uygulayacağınızı gösterebilirim. Oturum izleme ile sitenizi ziyaret eden bilgisayar yerine tarama oturumunu izlemeye çalışırsınız. Oturumu izleyerek, veritabanı şemanız şöyle görünür:

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

Oturum tabanlı izlemenin avantajları:

  1. Giriş yapmış kullanıcılar için her zaman username/ password/ kullanıcılarından aynı oturum kimliğini oluşturabilirsiniz email.
  2. Düğmesini kullanarak konuk kullanıcıları yine de izleyebilirsiniz sessionID.
  3. Birkaç kişi aynı bilgisayarı kullansa bile (örneğin, cybercafe) oturum açmışlarsa ayrı ayrı izleyebilirsiniz.

Oturum tabanlı izlemenin dezavantajları:

  1. Oturumlar tarayıcı tabanlıdır, bilgisayar tabanlıdır. Bir kullanıcı 2 farklı tarayıcı kullanıyorsa, 2 farklı oturumla sonuçlanır. Bu bir sorunsa, burada okumayı bırakabilirsiniz.
  2. Kullanıcı oturum açmadıysa oturumların süresi dolar. Bir kullanıcı oturum açmadıysa, kullanıcı çerezleri ve tarayıcı önbelleğini silerse geçersiz kılınacak bir konuk oturumu kullanır.

uygulama

Bunu uygulamanın birçok yolu vardır. Bunları kapsayabileceğimi sanmıyorum, sadece favorimi listeleyeceğim, bu da tartışmalı bir cevap verecek . Bunu aklınızda tutun.

temeller

Sonsuza kadar çerez olarak bilinen şeyi kullanarak oturumu izleyeceğim. Bu, kullanıcı çerezlerini silse veya tarayıcısını güncellese bile kendisini otomatik olarak yeniden oluşturacak verilerdir. Ancak kullanıcının hem çerezlerini hem de tarama önbelleklerini silmesinden kurtulamaz.

Bunu uygulamak için tarayıcıların önbellekleme mekanizmasını ( RFC ), WebStorage API'sını ( MDN ) ve tarayıcı çerezlerini ( RFC , Google Analytics ) kullanacağım .

Yasal

İzleme kimliklerini kullanmak için bunları hem gizlilik politikanıza hem de kullanım şartlarınıza tercihen İzleme alt başlığı altında eklemeniz gerekir . İkimiz de aşağıdaki tuşları kullanır document.cookieve window.localStorage:

  • _ga : Google Analytics verileri
  • __utma : Google Analytics izleme çerezi
  • sid : Oturum Kimliği

İzleme kullanan tüm sayfalara Gizlilik politikanıza ve kullanım şartlarına bağlantılar eklediğinizden emin olun.

Oturum verilerimi nerede saklarım?

Oturum verilerinizi web sitenizin veritabanında veya kullanıcıların bilgisayarında depolayabilirsiniz. Normalde üçüncü taraf uygulamaları (Google Analytics / Clicky / vb.) Kullanan daha küçük sitelerde (10 bin kesintisiz bağlantıya izin vermeden) çalıştığımdan, verileri istemci bilgisayarında depolamak benim için en iyisidir. Bunun aşağıdaki avantajları vardır:

  1. Veritabanı araması / ek yük / yük / gecikme / boşluk / vb. Yok.
  2. Kullanıcı bana can sıkıcı e-postalar yazmak zorunda kalmadan verilerini istediği zaman silebilir.

ve dezavantajları:

  1. Verilerin şifrelenmesi / şifresinin çözülmesi ve imzalanması / doğrulanması gerekir; bu da istemcide (o kadar da kötü değil) ve sunucuda (bah!) İşlemci yükü oluşturur.
  2. Kullanıcı çerezlerini ve önbelleklerini sildiğinde veriler silinir. (bu gerçekten istediğim şey)
  3. Kullanıcılar çevrimdışına çıktığında veriler analitik için kullanılamaz. (yalnızca şu anda gezinen kullanıcılar için analiz)

UUIDs

  • BrowserId : tarayıcılar kullanıcı aracısı dizesi üretilen benzersiz kimlik.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : Kullanıcıların IP Adresi ve HTTPS oturum anahtarından oluşturulur. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : Değiştirilmiş bir fingerprint.js tabanlı JavaScript tabanlı parmak izi .FingerPrint.get()
  • Oturum Kimliği : Kullanıcı 1. siteyi ziyaret ettiğinde rastgele anahtar oluşturulur.BrowserID|ComputerID|randombytes(256)
  • GoogleID : Çerezden oluşturulur __utma.getCookie(__utma).uniqueid

mekanizma

Geçen gün wendy williams gösterisini kız arkadaşımla izliyordum ve ev sahibi izleyicilerine ayda en az bir kez tarayıcı geçmişini silmelerini önerdiğinde tamamen dehşete düştü. Tarayıcı geçmişini silmek normalde aşağıdaki etkilere sahiptir:

  1. Ziyaret edilen web sitelerinin geçmişini siler.
  2. Çerezleri ve window.localStorage(adamım) siler .

Çoğu modern tarayıcı bu seçeneği kolayca kullanılabilir hale getirir, ancak arkadaşlardan korkmaz. Çünkü bir çözüm var. Tarayıcıda komut dosyalarını / resimleri ve diğer şeyleri saklamak için bir önbellek mekanizması vardır. Genellikle geçmişimizi silsek bile, bu tarayıcı önbelleği hala kalır. Tek ihtiyacımız olan verilerimizi burada saklamanın bir yolu. Bunu yapmanın 2 yöntemi vardır. Daha iyisi bir SVG görüntüsü kullanmak ve verilerimizi etiketlerinin içinde saklamaktır. Bu şekilde, flash kullanılarak JavaScript devre dışı bırakılsa bile veriler çıkarılabilir. Ancak bu biraz karmaşık olduğu için JSONP kullanan diğer yaklaşımı göstereceğim ( Wikipedia )

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

Artık oturum anahtarımızı istediğimiz zaman alabiliriz:

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

Tracking.js dosyasını tarayıcıya nasıl yapıştırabilirim?

Bunu Cache-Control , Last-Modified ve ETag HTTP başlıklarını kullanarak başarabiliriz . SessionIDEtag üstbilgisi için as değerini kullanabiliriz :

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

Last-Modified üstbilgisi tarayıcıya bu dosyanın temelde hiçbir zaman değiştirilmediğini söyler. Cache-Controlproxy'lere ve ağ geçitlerine belgeyi önbelleğe almamalarını söyler, ancak tarayıcıya 1 yıl boyunca önbelleğe almasını söyler.

Tarayıcı belgeyi bir sonraki istekte bulunduğunda, gönderir If-Modified-Sinceve If-None-Matchüstbilgileri gönderir . Bunları bir iade etmek için kullanabiliriz.304 Not Modified yanıt .

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

Şimdi tarayıcı her istediğimizde tracking.jssunucumuz bir 304 Not Modifiedsonuca yanıt verecek ve yerel kopyasınıntracking.js .

Hala anlamıyorum. Bunu bana açıkla

Kullanıcının tarama geçmişini temizlediğini ve sayfayı yenilediğini varsayalım. Kullanıcı bilgisayarında kalan tek şey tracking.jstarayıcı önbelleğinde bir kopyasıdır . Tarayıcı talep ettiğinde, alınan ilk sürümünü çalıştırmasına neden olan tracking.jsbir 304 Not Modifiedyanıt alır tracking.js. silinmiş tracking.jsolanı yürütür ve geri yükler SessionID.

onaylama

Haxor X'in hala oturum açtıklarında müşterilerimizin çerezlerini çaldığını varsayalım. Kriptografi ve Tarayıcı kurtarmaya parmak izi. Şunun için orijinal tanımımızı hatırlayın SessionID:

BrowserID|ComputerID|randomBytes(256)

Bunu şu şekilde değiştirebiliriz:

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

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

Şimdi SessionIDaşağıdaki algoritmayı kullanarak doğrulayabiliriz :

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; 

Şimdi Haxor'un saldırısının çalışması için:

  1. Aynısı var ComputerID . Bu, mağdurla aynı İSS sağlayıcısına sahip olmaları gerektiği anlamına gelir (Tricky). Bu, kurbanımıza kendi ülkesinde yasal işlem yapma fırsatı verecektir. Haxor ayrıca HTTPS oturum anahtarını kurbandan almalıdır (Hard).
  2. Aynı BrowserID. Herkes User-Agent dizesini taklit edebilir (Sinir bozucu).
  3. Kendi sahte SessionID(Çok Sert) oluşturabilir. Birim atamaları çalışmaz çünkü şifreleme / imzalama anahtarı oluşturmak için bir zaman damgası kullanırız, bu temelde her oturum için yeni bir anahtar oluşturmak gibidir. Bunun üzerine rastgele baytları şifreliyoruz, böylece basit bir sözlük saldırısı da söz konusu değil.

Biz yönlendirme ile doğrulama artırabilir GoogleIDve FingerprintIDkişilere karşı ve eşleştirme (ajax veya gizli alanlar üzerinden).

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

1
bu arada bu güzel bir cevap. Çok fazla bilgi. Daha fazla oyunuz olmadığına şaşırdım. Dürüst olmak gerekirse svgs ve jsonp ile tekniğin var olduğuna inanamıyorum, ama olmalı. Çerezler / localStorage / sessionStorage devre dışı bırakıldığında böyle bir tekniğe geri dönen bir kütüphane yok mu?
faceyspacey.com

Ayrıca, önbellek tracking.js dosyanızı (veya bu tür birden çok dosyayı) kullanmak için bunun gelişmiş bir sürümü olup olmadığını merak ediyorum. Buradaki fikir, bir kütüphanenin oturum sırasında oluşturulan ve arada sırada otomatik olarak oluşturulan tüm storageFacade.setItemfarkların . 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 setItem . And then a manifest` gibi yöntemlere sahip olması olacaktır .
faceyspacey.com

Manifest arada bir yaratıldıysa, esasen oluşturulan manifesto sayısını sınırlardı. Ve daha sonra javascript'te oluşturulan tüm olası bildirimleri istemeye çalışabilir ve daha sonra durumu diff anlık görüntülerden yeniden oluşturmak için en son olanı kullanabilirsiniz. Sadece farkımız olsaydı, yüzlerce veya binlerce olabilir ve biri başarısız olana kadar hepsini almaya çalışmak bir performans sorunu olabilir. Yani fark ya da tezahürü aşamalı olarak getirirsiniz: manifest-1.js, manifest-2.js, vb. Biri başarısız olana kadar (çünkü mevcut değildir). Yani u tüm manifests (veya diffs) var anlamına gelir
faceyspacey.com

@ faceyspacey.com Üzgünüm kitaplık yok. Kendi özel çözümünüzü kodlamanız ve sürekli güncellemeniz gerekir. Bunu düşün. Bunun için bir lib geliştirdiğiniz anda tüm ekleme engelleyicileri / tarayıcıları / vb. Bunun çalışmasının tek nedeni, kaldırmayacak / devre dışı bırakmayacakları çok önemli bir temel tarayıcı özelliğine dayanmasıdır: CACHING. Giriş bilgilerimi ve şifreleri kaybetmeye devam ediyorum. Ve artık çok fazla soru sormadığım için, çokça cevap vermem gerekmiyor, böylece ödülleri itibarla bırakabiliyorum. Sadece gördüm ve gerçek bir cevap olmadığını fark ettim.
Walter

30

Bir web sitesine erişen bilgisayarların sahiplerinin işbirliği olmadan tanımlanması mümkün değildir. Bununla birlikte, izin verirlerse, sitenizi tekrar ziyaret ettiğinde makineyi tanımlamak için bir çerez saklayabilirsiniz. Anahtar şudur: ziyaretçi kontrol altındadır; istedikleri zaman çerezi kaldırabilir ve yeni bir ziyaretçi olarak görünebilirler.


7
Sitenizi 3 farklı tarayıcıyla ziyaret ederse, çerezler uygulamalar arasında paylaşılmadığından 3 farklı çerez olacaktır. Ayrıca, statik bir IP adresi yerine DHCP kullanıyorsa, muhtemelen uzun süre bilgisayarında aynı IP adresine sahip olmayacaktır.
JohnnySoftware

2
Evet ve hayır. Tarayıcı parmak izi, yüksek olasılıklı bir tarayıcı profilini tanımlar, ancak bu soruda aranan mutlak bire bir kimlik değildir. Ayrıca, anlayışlı bir kullanıcının isterse kasıtlı olarak atlatması da oldukça basittir (ancak belki de kolay değildir ).
erickson

30

Flash çerezleri kullanma olasılığı :

  • Her yerde kullanılabilirlik (ziyaretçilerin yüzde 95'inde muhtemelen flaş olacaktır)
  • Çerez başına daha fazla veri depolayabilirsiniz (100 KB'a kadar)
  • Tarayıcılarda paylaşılır, böylece bir makineyi benzersiz bir şekilde tanımlama olasılığı daha yüksektir
  • Tarayıcı çerezlerini temizlemek, flaş çerezleri kaldırmaz.

Okumak ve yazmak için küçük (gizli) bir flash film oluşturmanız gerekir.

Hangi yolu seçerseniz seçin, kullanıcılarınızın izlenmeyi tercih ettiğinden emin olun, aksi takdirde gizliliklerini istila edersiniz ve kötü adamlardan biri olursunuz.


5
Birçok kullanıcı Flashblock kullanır. Flash, görmek istediği takdirde bir tıklama ile kullanıcıdan etkinleştirilir.
Horcrux7

3
Çerezleri kaldırmak için yöntemler vardır, ancak bunlar ortalama kullanıcının ötesindedir. Görüntüleme ve LSO en (Yerel Paylaşılan Nesne kaldırmak için Adobe'nin web sitesindeki sayfalara vardır en.wikipedia.org/wiki/Local_Shared_Object rağmen) Firefox kullanıcıları için itiraz eklenti bunları kaldırmak için en kolay yöntemdir
Sam Hasler

Bunun en iyi çözümlerden biri olduğunu düşünüyorum. Youtube, Google vb. LSO'ları kötüye kullanımla mücadele etmek için kullanır.
Uku Loskit

4
Flash çerezleri, Firefox ve Chrome'un modern sürümlerinde HTTP çerezleri kadar kolayca silinir: Vikipedi :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
Durum son dokuz yılda değişti. Günümüzde, kullanıcıların yüzde 95'i masaüstünde bile değil ve mobil Adobe Flash Player'ı gerçekten benimsemedi.
Damian Yerrick

21

Her çerezde benzersiz bir kimlik ayarlamayı denemek isteyebilirsiniz (çapraz tarayıcıda çalışır, SSS'lerine bakın): http://samy.pl/evercookie/

Bu sorunu çözmek için birçok büyük şirket tarafından kullanılan ThreatMetrix adlı bir şirket de var: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Oldukça pahalı ve bazıları diğer ürünleri çok iyi değil, ancak cihaz kimlikleri iyi çalışıyor.

Son olarak, panopticlick fikrinin bu açık kaynaklı jquery uygulaması var: https://github.com/carlo/jquery-browser-fingerprint Şu anda oldukça yarı pişmiş görünüyor, ancak genişletilebilir.

Umarım yardımcı olur!


+ 1 - Brian - Harika bilgi! Bunların hepsi çok faydalı oldu. Teşekkür ederim. O zamandan beri daha fazla öğrenmediyseniz daha fazla bilgi ekleyin.
Ben O

1
Evercookie ile ilgili. Opera ile denedim. Çerezleri ayarlayın, daha sonra Opera'dan tüm geçmişi silin, ardından Opera'yı kapattı, tekrar tıklatıldı Click to rediscover cookiesve null veya undefined olarak görüldü. Yani bu benim için çalışmıyor
Andris

İOS Safari Özel modu ve Masaüstü Chrome gizli moduyla örnek sayfayı denedi, tarayıcı yeniden başlatıldıktan sonra çerez alınamıyor.
Morio

20

Bu bilimsel makalede, tuval parmak izi adı verilen popüler bir yöntem var: Web Asla Unutmaz: Vahşi Doğada Kalıcı İzleme Mekanizmaları . Aramaya başladığınızda, ne sıklıkta kullanıldığına şaşıracaksınız. Yöntem, her tarayıcı / donanım kombinasyonu için tutarlı olan benzersiz bir parmak izi oluşturur.

Makale ayrıca evercookies, http ve Flash çerezlerinin yeniden doğması ve çerez senkronizasyonu gibi diğer kalıcı izleme yöntemlerini de inceler.

Tuval parmak izi hakkında daha fazla bilgi burada:


1
iki aygıt aynı ise (aynı toplu bilgisayarlar, aynı işletim sistemi, aynı tarayıcılar), parmak izleri aynıdır, değil mi?
xiaoyu2er

Buradaki asıl soru, bunu kullanmak için kodumda bırakabileceğim javascript kütüphanesidir. Bir ton teori okumak, önümüzdeki 60 dakika içinde çözülmesi gereken sorunları çözmez.
Thanasis Ioannidis

11

Bir HTTP bağlantısı üzerinden alabileceğiniz çok az miktarda bilgi vardır.

  1. IP - Ancak diğerlerinin söylediği gibi, çoğu İnternet kullanıcısı olmasa da çoğu ISP'nin dinamik ayırma politikaları nedeniyle bu sabit değildir.

  2. Useragent String - Neredeyse tüm tarayıcılar, her istekte ne tür bir tarayıcı olduklarını gönderir. Ancak, bu kullanıcı tarafından bugün birçok tarayıcıda ayarlanabilir.

  3. İstek alanlarının toplanması - Desteklenen kodlamalar, vb. Gibi her bir istekle birlikte gönderilen diğer alanlar da vardır. Bunlar, toplamda kullanılırsa, kullanıcının makinesinin kimliğinin belirlenmesine yardımcı olabilir, ancak yine tarayıcıya bağlıdır ve değiştirilebilir.

  4. Çerezler - Çerez ayarlamak, bir makineyi veya daha özel olarak bir makinedeki tarayıcıyı tanımlamanın başka bir yoludur, ancak diğerlerinin söylediği gibi, bunlar kullanıcılar tarafından silinebilir veya kapatılabilir ve yalnızca tarayıcıda uygulanabilir, makinesi.

Bu nedenle, doğru yanıt, yalnızca IP üzerinden HTTP protokolleri aracılığıyla yaşayacağınız şeyi elde edemeyeceğinizdir. Bununla birlikte, çerezlerin yanı sıra IP'nin ve HTTP isteğindeki alanların bir kombinasyonunu kullanarak, ne tür bir makine olduğunu tahmin etme, bir tür tahmin etme şansınız vardır. Kullanıcılar yalnızca bir tarayıcı ve genellikle bir makineden yararlanma eğilimindedir, bu nedenle bu oldukça güvenilir olabilir, ancak bu kitleye bağlı olarak değişecektir ... tekniklerin bu şeylerle uğraşması ve daha fazla makine / tarayıcı kullanması daha olasıdır. Ek olarak, bu, IP'yi coğrafi olarak konumlandırma ve bu verileri kullanma girişimi ile de birleştirilebilir. Ancak her durumda, her zaman doğru olacak bir çözüm yoktur.


10

Hem çerez hem de çerez olmayan yaklaşımlara sahip kusurlar vardır. Ancak çerez yaklaşımının eksikliklerini affedebilirseniz, işte bir fikir.

Sitenizde zaten Google Analytics kullanıyorsanız, benzersiz kullanıcıları kendiniz izlemek için kod yazmanıza gerek yoktur. Google Analytics bunu sizin için __utma, Google dokümanlarında açıklandığı gibi çerez değeri üzerinden yapar . Ve bu değeri yeniden kullanarak, sayfa isteklerinde verimlilik avantajları olan ek çerez yükü oluşturmazsınız.

Ve bu değere erişecek kadar kolay bir kod yazabilir veya bu komut dosyasının getUniqueId() işlevini kullanabilirsiniz.


getUniqueId()Aynı makinedeki farklı tarayıcılarda aynı kimliği kullanacak mıyım?
Ankur Akvaliya

8

Önceki çözümlerde olduğu gibi, çerezler iyi bir yöntemdir, ancak tarayıcıları tanımladıklarını unutmayın . Firefox'ta bir web sitesini ziyaret etsem ve sonra Internet Explorer'da çerezler her iki deneme için ayrı ayrı saklanırdı. Bazı kullanıcılar çerezleri de devre dışı bırakır (ancak daha fazla kişi JavaScript'i devre dışı bırakır).

Dikkate alınması gereken başka bir yöntem de IP ve ana bilgisayar adı tanımlamasıdır (bunların çevirmeli / statik olmayan IP kullanıcıları için değişebileceğini unutmayın, AOL ayrıca battaniye IP'leri kullanır). Ancak bu yalnızca ağları tanımladığından, çerezler kadar iyi çalışmayabilir.


Ağa erişim noktasını tanımlayan IP adresi ile iyi bir nokta - NAT ile, tek bir IP adresinin arkasına gizlenmiş tüm ülkeler olabilir ve daha akıllı olmazsınız. IPv4 adresi sıkıntısıyla, hala giden büyük İnternet trafiği için tek bir IP adresini paylaşan oldukça büyük şirketler veya okullar / üniversiteler göreceksiniz.
Piskvor

6

Sorguları bir kenara kullanma önerileri, sorgulamak için kullanılabilen tek kapsamlı öznitelikler kümesi HTTP istek başlığında bulunmaktadır. Bu nedenle, bir kullanıcı aracısı (yani tarayıcı) için sahte benzersiz bir tanımlayıcı oluşturmak için bunların bazı alt kümelerini kullanmak mümkündür. Ayrıca, bu bilgilerin çoğu zaten varsayılan olarak web sunucusu yazılımınızın sözde "erişim günlüğüne" kaydedilir ve eğer değilse, bunu kolayca yapılandırabilirsiniz. Daha sonra, bu günlüğün içeriğini basitçe tarayan ve parmak izleriIP adresi ve Kullanıcı Aracısı dizesi vb. gibi her bir talebin oluşması. Belirli çerezlerin içeriği dahil olmak üzere daha fazla veri, bu parmak izinin benzersizliğinin kalitesini arttırır. Diğerlerinin de belirttiği gibi, HTTP protokolü bunu% 100 kusursuz yapmaz - en iyi ihtimalle sadece oldukça iyi bir gösterge olabilir.


6

Asla online bankacılık web sitemi ziyaret etmemiş bir makine kullandığımda ek doğrulama istenir. sonra, ben ikinci kez geri online bankacılık sitesine gitmek i ek kimlik doğrulama sorulan dont ... i IE tüm çerezleri silinmiş ve tamamen yeniden kimlik doğrulama soruları sorulması bekleniyor benim online bankacılık sitesi üzerine relog. benim için sürpriz istenmedi. bu banka çerezleri içermeyen pc etiketleme bir tür yapıyor inanıyorum kurşun değil mi?

Bu, bankalar tarafından kullanılan oldukça yaygın bir kimlik doğrulama türüdür.

Diyelim ki banka web sitenize example-isp.com adresinden erişiyorsunuz. İlk kez orada olduğunuzda, ek kimlik doğrulamanın yanı sıra şifrenizi de girmeniz istenir. Geçtikten sonra banka, "thatisvaliant" kullanıcısının, example-isp.com aracılığıyla siteye erişmek için kimliğinin doğrulandığını bilir.

Gelecekte, example-isp.com adresinden siteye eriştiğinizde ek kimlik doğrulaması (şifrenizin ötesinde) istenmeyecektir. Bankaya another-isp.com adresinden erişmeye çalışırsanız, banka aynı rutinden tekrar geçer.

Özetlemek gerekirse, bankanın tanımladığı şey IP adresinize göre ISS'niz ve / veya netbloğunuzdur. Açıkçası ISP'nizdeki her kullanıcı siz değilsiniz, bu yüzden banka hala şifrenizi istiyor.

Farklı bir ülkede kredi kartı kullandığınızda her şeyin yolunda olduğunu doğrulamak için bir kredi kartı şirketi çağrınız oldu mu? Aynı kavram.


4

Gerçekten, yapmak istediğiniz şey yapılamaz çünkü protokoller buna izin vermez. Statik IP'ler evrensel olarak kullanıldıysa, bunu yapabilirsiniz. Onlar değil, bu yüzden yapamazsınız.

Gerçekten insanları tanımlamak istiyorsanız , giriş yapmasını sağlayın .

Muhtemelen web sitenizdeki farklı sayfalara gidecekleri için, hareket ettikçe onları takip etmek için bir yola ihtiyacınız vardır.

Oturum açtıkları ve sitenizdeki oturumlarını çerezler / bağlantı parametreleri / işaretçiler / ne olursa olsun izlediğiniz sürece, bu süre boyunca aynı bilgisayarı kullandıklarından emin olabilirsiniz.

Sonuç olarak, kullanıcılarınız kendi yerel ağınızı kullanmıyorsa ve statik IP adresleri yoksa, hangi bilgisayarı kullandıklarını söylemek yanlıştır.

Yapmak istediğiniz şey kullanıcıların işbirliği ile yapılıyorsa ve her çerez için yalnızca bir kullanıcı varsa ve tek bir web tarayıcısı kullanıyorlarsa, sadece bir çerez kullanın.


3

Çerezler, benzersiz ziyaretçileri belirlemek için yararlı olmaz. Bir kullanıcı çerezleri temizleyebilir ve siteyi yenileyebilir - daha sonra tekrar yeni bir kullanıcı olarak sınıflandırılır.

Bunu yapmanın en iyi yolunun, sunucu tarafında bir çözüm uygulamak olduğunu düşünüyorum (verilerinizi saklamak için bir yere ihtiyacınız olacak gibi). Bu tür veriler için ihtiyaçlarınızın karmaşıklığına bağlı olarak, neyin benzersiz bir ziyaret olarak sınıflandırıldığını belirlemeniz gerekecektir. Makul bir yöntem, bir IP adresinin ertesi gün geri dönmesine ve benzersiz bir ziyaret yapılmasına izin vermektir. Bir günde bir IP adresinden yapılan birkaç ziyaret, benzersiz sayılmamalıdır.

Örneğin PHP kullanarak bir ziyaretçinin IP adresini almak ve bir metin dosyasında (veya bir sql veritabanında) saklamak önemsizdir.

Bir sunucu tarafı çözümü tüm makinelerde çalışır, çünkü kullanıcıyı sitenizi ilk yüklediğinde izleyeceksiniz. İstemci tarafı komut dosyası oluşturma amaçlı olduğu için javascript kullanmayın, ayrıca kullanıcı her durumda devre dışı bırakmış olabilir.

Umarım yardımcı olur.


4
Eşim ve ben evde bir NAT güvenlik duvarının arkasındaki dört farklı bilgisayarlara göz atın. Aynı IP'ye sahip olduğumuzu gösteririz, bu yüzden şemanızla aynı kullanıcı olarak görünüriz.
Adam Ness

Mysql'de ek değişkenler yazmak için (burada belirtilen panopticlick.eff.org/browser-uniqueness.pdf ) ne olur? Yani ip adresi aynı olurdu, ancak diğer bazı özellikler farklı olabilir.
Andris

3

Çözümün tüm makinelerde ve tüm tarayıcılarda çalışmasını istediğim için (sebeple) Javascript kullanarak bir çözüm oluşturmaya çalışıyorum.

Javascript kullanmamak gerçekten iyi bir neden değil mi?

Diğerlerinin söylediği gibi - çerezler muhtemelen en iyi seçeneğinizdir - sadece sınırlamaların farkında olun.


3

Fingerprintjs kullanabilirsiniz2

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

Bundan sonra tüm kullanıcılarınızı var olanlara karşı kontrol edebilir ve JSON benzerliğini kontrol edebilirsiniz, böylece parmak izleri değişse bile onları takip edebilirsiniz.


2

Bence sanırım web sitemi ziyaret eden bir bilgisayarı programlı olarak tanımlayamıyorum.

Aşağıdaki sorum var. Asla online bankacılık web sitemi ziyaret etmemiş bir makine kullandığımda ek doğrulama istenir. Sonra, ikinci kez geri online bankacılık sitesine gitmek i dont ek doğrulama istemiyorum. sorumun cevaplarını okurken bir çerez olması gerektiğine karar verdim. Bu nedenle, IE'deki tüm çerezleri sildim ve çevrimiçi bankacılık siteme tamamen yeniden doğrulama soruları sorulmasını bekledi. benim için sürpriz istenmedi. bu banka çerezleri içermeyen pc etiketleme bir tür yapıyor inanıyorum kurşun değil mi?

Ayrıca, bugün çok googling sonra ben bir web sitesini ziyaret makineleri benzersiz olarak tanımlayan bir çözüm satmak iddia iddia aşağıdaki şirket bulundu. http://www.the41.com/products.asp .

i büyük ölçüde takdir ediyorum buldum bu çelişkili bilgi daha açıklamak eğer tüm iyi bilgi için teşekkür ederiz.


Buna dayanarak: the41.com/download/… Onların çözümü, kullanıcının makineye dayalı benzersiz bir tanımlayıcı oluşturan ve bazı giriş kimlik bilgilerine bağlayan bir yazılım parçası indirmesini sağlamak gibi görünüyor.
mmacaulay

Daha önce de belirtildiği gibi, bir Flash çerezi kullanarak bankanızı dışlamadınız. Flash çerezleri ve sorunla ilgili diğer tartışmalar nasıl temizlenir: tips.vlaurie.com/2007/10/24/…
micahwittman

Tahminim: Banka, (1) kullanıcı adınızı biliyorsanız, (2) şifrenizi biliyorsanız ve (3a) çerezlerine sahipseniz ya da (3b) daha önce sahip oldukları bir IP adresinden gelirseniz, siz olduğunuza güvenir. sizinle ilişkili.
Zack Peterson

2

Bunu çerezlerin ve flash çerezlerin bir kombinasyonunu kullanarak yapardım. Bir GUID oluşturun ve bir çerezde saklayın. Çerez yoksa flash çerezi okumaya çalışın. Hâlâ bulunamıyorsa, oluşturun ve flash çerezine yazın. Bu şekilde aynı GUID'i tarayıcılarda paylaşabilirsiniz.


1

Bence çerezler aradığınız şey olabilir; çoğu web sitesi ziyaretçileri bu şekilde benzersiz şekilde tanımlar.


0

Kullanıcının kontrol altında olmasını istemediğinizi varsayarsak, yapamazsınız. Web böyle çalışmaz, umabileceğiniz en iyi şey sezgisel taramadır.

Ziyaretçinizi bir yazılım yüklemeye ve TCPA kullanmaya zorlamak için bir seçenek varsa, bir şeyler çıkarabilirsiniz.


0

Yazım bir çözüm olmayabilir, ancak bu özelliğin uygulandığı bir örnek verebilirim.

Sayfasının kayıt sayfasını ziyaret ederseniz www.supertorrents.orgBilgisayarınızdan ilk kez sorun yoktur. Ancak sayfayı yeniler veya sayfayı tekrar açarsanız, sayfayı daha önce ziyaret ettiğiniz anlamına gelir. Gerçek güzellik buraya gelir - Windows'u veya diğer işletim sistemlerini yeniden yükleseniz bile tanımlar.

CPU kimliğini sakladıkları bir yerde okudum. Nasıl yaptıklarını bulamasam da, ciddi şekilde şüpheliyim ve bunu yapmak için MAC Adresini kullanabilirler.

Bunu nasıl yapacağımı bulursam kesinlikle paylaşacağım .


www.supertorrents.org öldü
Alet

0

Bir hile:

  1. 2 Kayıt Sayfası oluşturun:

    İlk Kayıt Sayfası: herhangi bir e-posta veya güvenlik kontrolü olmadan (sadece kullanıcı adı ve şifre ile)

    İkinci Kayıt Sayfası: yüksek güvenlik seviyesine sahip (e-posta doğrulama isteği ve güvenlik resmi vb.)

  2. Müşteri memnuniyeti ve kolay kayıt için varsayılan kayıt sayfası (İlk Kayıt Sayfası) olmalı, ancak (İlk Kayıt Sayfası) gizli bir kısıtlama olmalıdır. IP Kısıtlaması. Bir IP ikinci kez kayıt yapmaya çalıştıysa, engelleme sayfasını göstermek yerine (örneğin 1 saatten az). (İkinci Kayıt Sayfası) ' nı otomatik olarak gösterebilirsiniz .

  3. içinde (İlk Kayıt Sayfa) (: blok sadece 1 saat ya da 24 saat boyunca 1 ip 2 girişimleri örneğin) ve 1 (örneğin) saat sonra, otomatik olarak o ip erişime açabilirsiniz ayarlayabileceğiniz

Lütfen dikkat: (İlk Kayıt Sayfası) ve (İkinci Kayıt Sayfası) ayrı sayfalarda olmamalıdır. sadece 1 sayfa yaparsınız. (örneğin: register.php) ve İlk PHP Stili ile İkinci PHP Stili arasında geçiş yapmayı akıllı hale getirin


Mehdi Jazini. Hepsi doğru ama sorum şu ki u istemci makinenin IP adresini nasıl tanımlayacağım.
JENKINS J
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.