Jak jednoznacznie zidentyfikować komputery odwiedzające moją stronę internetową?

184

Muszę znaleźć sposób jednoznacznej identyfikacji każdego komputera, który odwiedza witrynę, którą tworzę. Czy ktoś ma jakieś porady, jak to osiągnąć?

Ponieważ chcę, aby rozwiązanie działało na wszystkich komputerach i we wszystkich przeglądarkach (z uzasadnionego powodu), próbuję utworzyć rozwiązanie za pomocą javascript.

Pliki cookie nie działają.

Potrzebuję zdolności do stworzenia przewodnika, który jest unikalny dla komputera i powtarzalny, zakładając, że na komputerze nie nastąpiły żadne zmiany sprzętowe. Kierunki, o których myślę, to uzyskanie MAC karty sieciowej i inne tego rodzaju informacje, które będą identyfikować maszynę odwiedzającą stronę internetową.

to jest wartościowe
źródło
4
Nie możesz pobrać Maca z ich karty sieciowej - adres IP nie zawiera tych informacji, najlepiej możesz uzyskać adres IP ich bramy ISP. Dla niektórych dostawców usług internetowych mogą być takie same dla wszystkich użytkowników w danym mieście.
Martin Beckett,
1
Fakt, że nie chcesz, aby użytkownik mógł go sfałszować. Odpowiedź brzmi oczywiście, że nie da się tego zrobić bez jakiegoś uprzywilejowanego komponentu zainstalowanego na komputerze użytkownika.
AnthonyWJones,
Adresy MAC można łatwo sfałszować. Moje marne małe bezprzewodowe połączenie przejdzie przez twój MAC, zastąpi własne lub użyje tego, które określisz.
Kent Brewster,
Tego nie da się zrobić - ciasteczka są najlepszym rozwiązaniem
Draemon
Proszę przeczytać moją odpowiedź na tej stronie. mam bardzo dobry pomysł na ten problem :)
Mahdi Jazini

Odpowiedzi:

58

Osoby te opracowały metodę pobierania odcisków palców w celu rozpoznania użytkownika z wysoką dokładnością:

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

Sprawdzamy, w jakim stopniu nowoczesne przeglądarki internetowe podlegają „odciskom palców urządzeń” za pomocą informacji o wersji i konfiguracji, które będą przesyłane na strony internetowe na żądanie. Wdrożyliśmy jeden możliwy algorytm odcisków palców i zebraliśmy te odciski palców z dużej próbki przeglądarek, które odwiedziły naszą stronę testową, panopticlick.eff.org. Zauważamy, że dystrybucja naszego odcisku palca zawiera co najmniej 18,1 bity entropii, co oznacza, że ​​jeśli wybieramy przeglądarkę losowo, w najlepszym razie oczekujemy, że tylko jedna na 286 777 innych przeglądarek będzie dzielić swój odcisk palca. Sytuacja jest gorsza wśród przeglądarek obsługujących Flash lub Javę, ponieważ średnia przeglądarka ma co najmniej 18,8 bitów informacji identyfikujących. 94,2% przeglądarek z Flash lub Java było unikatowych w naszej próbce.

Obserwując powracających gości, szacujemy, jak szybko odciski palców przeglądarki mogą się zmieniać w czasie. W naszej próbie odciski palców zmieniały się dość szybko, ale nawet zwykła heurystyka była zwykle w stanie zgadnąć, kiedy odcisk palca był „ulepszoną” wersją wcześniej obserwowanego odcisku palca przeglądarki, przy 99,1% trafień poprawnych i fałszywie dodatnim współczynniku tylko 0,86% .

Omawiamy, co w praktyce stanowi odcisk palca dla przeglądarki i jakie środki zaradcze mogą być odpowiednie, aby temu zapobiec. Istnieje kompromis między ochroną przed odciskami palców a niektórymi rodzajami debugowania, która w obecnych przeglądarkach jest silnie obciążona prywatnością. Paradoksalnie technologie ochrony przed odciskami palców mogą być samowystarczalne, jeśli nie są używane przez wystarczającą liczbę osób; pokazujemy, że niektóre środki ochrony prywatności padają obecnie ofiarą tego paradoksu, ale inne nie ...

Jonathan
źródło
14
Jestem programistą, przyszedłem tutaj, aby poszukać szybkiego rozwiązania lub małego fragmentu kodu. Ten dokument nie pokazuje, jak go wdrożyć. Chcę wiedzieć, jak to zaimplementować, aby móc śledzić unikalnych użytkowników mojej witryny.
Oliver
10
@Oliver Masz rację. To nie daje odpowiedzi na talerzu. Wymaga to dalszej lektury, zrozumienia wszystkich związanych z tym problemów i dlaczego prosty fragment kodu prawdopodobnie nigdy nie będzie w pełni działał. Przedsiębiorczy programista może napisać bibliotekę, która wykona całą ciężką pracę, i umożliwić ludziom szukającym „szybkiego rozwiązania” w przyszłości.
Jonathan
2
Odpowiedź jest również tylko link. Docenione zostaną techniki opisane w pliku PDF, gdyby plik PDF stał się niedostępny.
Damian Yerrick
2
Zobacz moją odpowiedź tutaj dla pakietu open source i łatwego sposobu na wdrożenie odcisku palca stackoverflow.com/a/47536192/3650835
KayakinKoder
Więc lepiej zrobię sprężyste „ciasteczko” z losową dużą liczbą: D
Luis Mauricio
49

Wprowadzenie

Nie wiem, czy istnieje lub kiedykolwiek będzie sposób na jednoznaczną identyfikację maszyn za pomocą samej przeglądarki. Główne powody to:

  • Będziesz musiał zapisać dane na komputerze użytkownika. Użytkownik może usunąć te dane w dowolnym momencie. Chyba że masz sposób na odtworzenie tych danych, które są unikalne dla każdej maszyny, a następnie utkniesz.
  • Uprawomocnienie. Musisz chronić się przed fałszowaniem, przechwytywaniem sesji itp.

Nawet jeśli istnieją sposoby na śledzenie komputera bez użycia plików cookie, zawsze będzie sposób na obejście go i oprogramowanie, które zrobi to automatycznie. Jeśli naprawdę potrzebujesz śledzić coś na podstawie komputera, musisz napisać natywną aplikację (Apple Store / Android Store / Windows Program / etc).

Być może nie będę w stanie udzielić odpowiedzi na zadane pytanie, ale mogę pokazać, jak wdrożyć śledzenie sesji. Dzięki śledzeniu sesji próbujesz śledzić sesję przeglądania zamiast odwiedzania witryny przez komputer. Dzięki śledzeniu sesji schemat bazy danych będzie wyglądał następująco:

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

Zalety śledzenia na podstawie sesji:

  1. Dla zalogowanych użytkowników zawsze możesz wygenerować ten sam identyfikator sesji od użytkowników username/ password/ email.
  2. Nadal możesz śledzić użytkowników korzystających sessionID.
  3. Nawet jeśli kilka osób korzysta z tego samego komputera (np. Kafejka internetowa), możesz je śledzić osobno, jeśli się zalogują.

Wady śledzenia na podstawie sesji:

  1. Sesje są oparte na przeglądarce, a nie na komputerze. Jeśli użytkownik używa 2 różnych przeglądarek, spowoduje to 2 różne sesje. Jeśli jest to problem, możesz przestać czytać tutaj.
  2. Sesje wygasają, jeśli użytkownik nie jest zalogowany. Jeśli użytkownik nie jest zalogowany, wówczas użyje sesji gościa, która zostanie unieważniona, jeśli użytkownik usunie pliki cookie i pamięć podręczną przeglądarki.

Realizacja

Istnieje wiele sposobów realizacji tego. Nie sądzę, żebym mógł je wszystkie opisać. Po prostu wymienię moich ulubionych, co sprawi, że będzie to pozytywna odpowiedź . Pamiętaj o tym.

Podstawy

Będę śledzić sesję, używając tak zwanego wiecznego pliku cookie. Są to dane, które zostaną automatycznie odtworzone, nawet jeśli użytkownik usunie pliki cookie lub zaktualizuje przeglądarkę. Nie przetrwa jednak usunięcie zarówno plików cookie, jak i pamięci podręcznej przeglądania.

W tym celu wykorzystam mechanizm buforowania przeglądarki ( RFC ), API WebStorage ( MDN ) i pliki cookie przeglądarki ( RFC , Google Analytics ).

Prawny

Aby wykorzystać identyfikatory śledzenia, musisz dodać je zarówno do swojej polityki prywatności, jak i warunków korzystania, najlepiej w ramach poddziału Śledzenie . Będziemy używać następujących kluczy zarówno na, jak document.cookiei na window.localStorage:

  • _ga : dane Google Analytics
  • __utma : Śledzący plik cookie Google Analytics
  • sid : SessionID

Upewnij się, że na wszystkich stronach korzystających ze śledzenia dołączasz linki do swojej polityki prywatności i warunków użytkowania.

Gdzie mam przechowywać dane sesji?

Możesz zapisać dane sesji w bazie danych witryny lub na komputerze użytkownika. Ponieważ zwykle pracuję na mniejszych witrynach (pozwalających na ponad 10 tysięcy ciągłych połączeń), które używają aplikacji innych firm (Google Analytics / Clicky / itp.), Najlepiej jest dla mnie przechowywać dane na komputerze klienta. Ma to następujące zalety:

  1. Brak wyszukiwania w bazie danych / narzutu / obciążenia / opóźnienia / spacji / itp.
  2. Użytkownik może usunąć swoje dane w dowolnym momencie, bez potrzeby pisania mi irytujących wiadomości e-mail.

i wady:

  1. Dane muszą być zaszyfrowane / odszyfrowane i podpisane / zweryfikowane, co tworzy obciążenie procesora na kliencie (nieźle) i na serwerze (bah!).
  2. Dane są usuwane, gdy użytkownik usuwa pliki cookie i pamięć podręczną. (tego naprawdę chcę)
  3. Dane są niedostępne dla analiz, gdy użytkownicy przechodzą do trybu offline. (dane analityczne tylko dla aktualnie przeglądających użytkowników)

UUIDS

  • BrowserID : Unikalny identyfikator generowany z ciągu agenta użytkownika przeglądarki.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : Wygenerowano z adresu IP użytkownika i klucza sesji HTTPS. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : odcisk palca oparty na JavaScript oparty na zmodyfikowanym pliku fingerprint.js .FingerPrint.get()
  • SessionID : Losowy klucz generowany podczas pierwszej wizyty użytkownika w witrynie.BrowserID|ComputerID|randombytes(256)
  • GoogleID : Wygenerowano z __utmapliku cookie.getCookie(__utma).uniqueid

Mechanizm

Pewnego dnia oglądałem pokaz mojej wendy Williams z moją dziewczyną i byłem całkowicie przerażony, gdy prowadząca poradziła swoim widzom, aby usunęli historię przeglądarki przynajmniej raz w miesiącu. Usunięcie historii przeglądarki ma zwykle następujące skutki:

  1. Usuwa historię odwiedzanych stron internetowych.
  2. Usuwa pliki cookie i window.localStorage(aww man).

Większość współczesnych przeglądarek udostępnia tę opcję, ale nie bój się przyjaciół. Bo jest rozwiązanie. Przeglądarka ma mechanizm buforowania do przechowywania skryptów / obrazów i innych rzeczy. Zwykle nawet jeśli usuniemy naszą historię, ta pamięć podręczna przeglądarki nadal pozostaje. Wszystko, czego potrzebujemy, to sposób przechowywania naszych danych tutaj. Można to zrobić na 2 sposoby. Lepszym rozwiązaniem jest użycie obrazu SVG i przechowywanie naszych danych w jego tagach. W ten sposób dane można nadal wyodrębniać, nawet jeśli JavaScript jest wyłączony za pomocą flasha. Ponieważ jednak jest to trochę skomplikowane, pokażę inne podejście, które wykorzystuje JSONP ( Wikipedia )

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

Teraz możemy uzyskać klucz sesji w dowolnym momencie:

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

Jak sprawić, by tracking.js został w przeglądarce?

Możemy to osiągnąć za pomocą nagłówków HTTP Cache-Control , Last-Modified i ETag . Możemy użyć SessionIDwartości as dla nagłówka etag:

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

Last-ModifiedNagłówek informuje przeglądarkę, że ten plik zasadniczo nigdy nie jest modyfikowany. Cache-Controlinformuje serwery proxy i bramy, aby nie buforowały dokumentu, ale przeglądarkę buforuje go przez 1 rok.

Następnym razem, gdy przeglądarka zażąda dokumentu, wyśle If-Modified-Sincei If-None-Matchnagłówki. Możemy użyć ich do zwrócenia 304 Not Modifiedodpowiedzi.

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

Teraz za każdym razem, gdy przeglądarka zażąda, tracking.jsnasz serwer odpowie 304 Not Modifiedwynikiem i wymusi wykonanie lokalnej kopii tracking.js.

Nadal nie rozumiem. Wyjaśnij mi to

Załóżmy, że użytkownik czyści historię przeglądania i odświeża stronę. Na komputerze użytkownika pozostaje tylko kopia tracking.jspamięci podręcznej przeglądarki. Gdy przeglądarka zażąda tracking.js, otrzymuje 304 Not Modifiedodpowiedź, która powoduje wykonanie pierwszej tracking.jsotrzymanej wersji . tracking.jswykonuje i przywraca SessionIDusunięte dane.

Uprawomocnienie

Załóżmy, że Haxor X kradnie ciasteczka naszych klientów, gdy są jeszcze zalogowani. Jak je chronić? Kryptografia i odciski palców przeglądarki na ratunek. Pamiętaj, że nasza pierwotna definicja SessionIDbrzmiała:

BrowserID|ComputerID|randomBytes(256)

Możemy to zmienić na:

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

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

Teraz możemy zweryfikować nasz SessionIDprzy użyciu następującego algorytmu:

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; 

Teraz, aby atak Haxora zadziałał, muszą:

  1. Miej to samo ComputerID. Oznacza to, że muszą mieć tego samego dostawcę usług internetowych co ofiara (Tricky). To da naszej ofierze możliwość podjęcia kroków prawnych we własnym kraju. Haxor musi także uzyskać klucz sesji HTTPS od ofiary (trudny).
  2. Miej to samo BrowserID. Każdy może sfałszować ciąg User-Agent (irytujące).
  3. Być w stanie stworzyć własne fałszywe SessionID(Very Hard). Ataki woluminów nie będą działać, ponieważ używamy znacznika czasu do generowania klucza szyfrowania / podpisywania, więc zasadniczo przypomina to generowanie nowego klucza dla każdej sesji. Ponadto szyfrujemy losowe bajty, więc prosty atak słownikowy również nie wchodzi w rachubę.

Możemy poprawić sprawdzanie poprawności poprzez przekazywanie GoogleIDi FingerprintID(poprzez ajax lub ukryte pola) i dopasowanie do nich.

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;
Walter
źródło
1
tak przy okazji, to piękna odpowiedź. Tyle informacji. Dziwię się, że nie masz więcej pozytywnych opinii. Szczerze mówiąc, nie mogę uwierzyć, że technika z svgs i jsonp istnieje, ale musi. Czy nie ma biblioteki, która opierałaby się na takiej technice, gdy pliki cookie / localStorage / sessionStorage są wyłączone?
faceyspacey.com,
Zastanawiam się również, czy istnieje zaawansowana wersja tego, aby po prostu użyć buforowanego pliku tracking.js (lub wielu takich plików), aby używać go jako zasadniczo lokalnego przechowywania / plików cookie, tj. Do zapamiętywania dużej ilości danych. Pomysł polegałby na tym, aby biblioteka miała metody takie jak storageFacade.setItemi storageFacade.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` wszystkich różnic utworzonych podczas sesji, która jest tworzona automatycznie co jakiś czas.
faceyspacey.com,
Jeśli manifest był tworzony tylko raz na jakiś czas, zasadniczo ograniczałoby to liczbę tworzonych manifestów. A później w javascript możesz spróbować zażądać wszystkich utworzonych manifestów, a następnie użyć najnowszego, aby odbudować stan z migawek różnic. Gdybyśmy mieli tylko różnice, mogą istnieć setki lub tysiące i może to być problem z wydajnością, aby spróbować pobrać je wszystkie, dopóki jeden się nie powiedzie. Oznacza to, że pobierasz różnicę lub manifest przyrostowo: manifest-1.js, manifest-2.js itd., Dopóki nie zawiedzie (ponieważ nie istnieje). Co oznacza, że ​​masz wszystkie manifesty (lub różnice)
faceyspacey.com 10.10.17
@ faceyspacey.com Przepraszamy, nigdy nie ma bibliotek. Musisz kodować i stale aktualizować własne niestandardowe rozwiązanie. Pomyśl o tym. Jak tylko stworzysz bibliotekę lib, wszystkie blokery / przeglądarki / etc natychmiast by temu przeciwdziałały. Jedynym powodem, dla którego to działa, jest to, że polega na bardzo ważnej podstawowej funkcji przeglądarki, której po prostu nie usuwają / nie wyłączają: CACHING. Tracę loginy i hasła. A ponieważ nie zadaję już wielu pytań, nie muszę odpowiadać na wiele, aby zostawić nagrody z reputacją. Właśnie to zobaczyłem i zdałem sobie sprawę, że nie ma prawdziwej odpowiedzi.
Walter,
30

Nie można zidentyfikować komputerów uzyskujących dostęp do strony internetowej bez współpracy ich właścicieli. Jeśli jednak na to pozwalają, możesz zapisać plik cookie w celu identyfikacji komputera, gdy ponownie odwiedzi Twoją witrynę. Kluczem jest to, że gość ma kontrolę; mogą usunąć plik cookie i pojawić się jako nowy użytkownik w dowolnym momencie.

erickson
źródło
7
Jeśli odwiedzi Twoją witrynę za pomocą 3 różnych przeglądarek, będzie miał 3 różne pliki cookie, ponieważ pliki cookie nie są udostępniane między aplikacjami. Ponadto, jeśli używa DHCP zamiast statycznego adresu IP, prawdopodobnie nie będzie miał tego samego adresu IP na swoim komputerze.
JohnnySoftware
2
Tak i nie. Odcisk palca przeglądarki identyfikuje profil przeglądarki z dużym prawdopodobieństwem, ale nie jest to absolutna identyfikacja jeden do jednego poszukiwana w tym pytaniu. Jest również dość prosty (ale być może nie łatwy ) dla doświadczonego użytkownika, aby umyślnie obchodzić go, jeśli sobie tego życzy.
erickson
30

Możliwe jest użycie plików cookie flash :

  • Wszechobecna dostępność (95 procent odwiedzających prawdopodobnie będzie miało flash)
  • Możesz zapisać więcej danych na plik cookie (do 100 KB)
  • Dzielone między przeglądarkami, więc bardziej prawdopodobne jest jednoznaczne zidentyfikowanie komputera
  • Wyczyszczenie plików cookie przeglądarki nie powoduje usunięcia plików cookie flash.

Musisz zbudować mały (ukryty) film flash, aby go przeczytać i napisać.

Niezależnie od wybranej trasy upewnij się, że użytkownicy wybierają opcję śledzenia, w przeciwnym razie naruszasz ich prywatność i stajesz się jednym ze złych.

Joeri Sebrechts
źródło
5
Wielu użytkowników korzysta z Flashblocka. Flash zostanie aktywowany przez użytkownika jednym kliknięciem, jeśli chce go zobaczyć.
Horcrux7
3
Istnieją metody usuwania plików cookie, ale wykraczają one poza przeciętnego użytkownika. Na stronie Adobe są strony do przeglądania i usuwania LSO (Local Shared Object en.wikipedia.org/wiki/Local_Shared_Object ), chociaż dla użytkowników Firefoksa dodatek Objection jest najłatwiejszym sposobem na ich usunięcie
Sam Hasler
Myślę, że to jedno z najlepszych rozwiązań. YouTube, Google itp. Używają LSO do zwalczania nadużyć.
Uku Loskit,
4
Ciasteczka flash można tak łatwo usunąć jak ciasteczka HTTP we współczesnych wersjach Firefox i 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
Sytuacja zmieniła się w ciągu ostatnich dziewięciu lat. Obecnie 95 procent użytkowników nie korzysta nawet z komputerów, a urządzenia mobilne nigdy tak naprawdę nie korzystały z Adobe Flash Playera.
Damian Yerrick
21

Możesz spróbować ustawić unikalny identyfikator w evercookie (będzie działać w różnych przeglądarkach, zobacz ich FAQ): http://samy.pl/evercookie/

Istnieje również firma o nazwie ThreatMetrix, która jest używana przez wiele dużych firm do rozwiązania tego problemu: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Są one dość drogie, a niektóre ich inne produkty nie są zbyt dobre, ale identyfikator urządzenia działa dobrze.

Wreszcie, istnieje implementacja panopticlick typu open source typu jquery: https://github.com/carlo/jquery-browser-fingerprint Wygląda teraz na wpół upieczony, ale można go rozwinąć.

Mam nadzieję, że to pomoże!

Brian Armstrong
źródło
+ 1 - Brian - Świetna informacja! Wszystko to okazało się bardzo przydatne. Dziękuję Ci. Dodaj więcej informacji, jeśli od tego czasu się nie uczysz.
Ben O
1
Odnośnie evercookie. Próbowałem z Operą. Ustaw pliki cookie, a następnie usuń całą historię z Opery, a następnie zamknij Operę, otworzył ponownie kliknięty Click to rediscover cookiesi zobaczył albo zerowy, albo niezdefiniowany. Więc to nie działa dla mnie
Andris
Próbowałem przykładowej strony w trybie prywatnym iOS Safari i incognito na pulpicie Chrome, nie można pobrać pliku cookie po ponownym uruchomieniu przeglądarki.
Morio
20

Istnieje popularna metoda zwana odciskaniem palców na płótnie, opisana w tym artykule naukowym: Sieć nigdy nie zapomina: trwałe mechanizmy śledzenia na wolności . Gdy zaczniesz go szukać, zdziwisz się, jak często jest używany. Metoda tworzy unikalny odcisk palca, który jest spójny dla każdej kombinacji przeglądarki / sprzętu.

W artykule omówiono także inne trwałe metody śledzenia, takie jak evercookie, odradzanie plików cookie HTTP i Flash oraz synchronizowanie plików cookie.

Więcej informacji na temat odcisku palca na płótnie tutaj:

Na Quested Aronsson
źródło
1
więc jeśli dwa urządzenia są identyczne (te same komputery wsadowe, te same systemy operacyjne, te same przeglądarki), odciski palców są takie same, prawda?
xiaoyu2er
Faktyczne pytanie brzmi: czy biblioteka javascript może dodać kod, aby z niego skorzystać. Czytanie ton teorii nie rozwiązuje problemów, które należy rozwiązać w ciągu następnych 60 minut.
Thanasis Ioannidis
11

Istnieje tylko niewielka ilość informacji, które można uzyskać za pośrednictwem połączenia HTTP.

  1. IP - ale jak powiedzieli inni, nie jest to ustalone dla wielu, jeśli nie dla większości użytkowników Internetu, ze względu na zasady dynamicznej alokacji ich usługodawcy internetowego.

  2. Ciąg Useragent - prawie wszystkie przeglądarki wysyłają rodzaj przeglądarki przy każdym żądaniu. Może to jednak ustawić dzisiaj użytkownik w wielu przeglądarkach.

  3. Zbieranie pól żądań - do każdego żądania wysyłane są inne pola, takie jak obsługiwane kodowanie itp. Te, jeśli zostaną użyte w agregacji, mogą pomóc w identyfikacji komputera użytkownika, ale znowu zależą od przeglądarki i można je zmienić.

  4. Pliki cookie - ustawienie pliku cookie to kolejny sposób identyfikacji komputera, a dokładniej przeglądarki na komputerze, ale jak powiedzieli inni, mogą one zostać usunięte lub wyłączone przez użytkowników i mają zastosowanie tylko w przeglądarce, a nie maszyna.

Tak więc poprawną odpowiedzią jest to, że nie można osiągnąć tego, co żyłbyś za pomocą samych protokołów HTTP over IP. Jednak stosując kombinację plików cookie oraz adresu IP i pól w żądaniu HTTP, masz dużą szansę na odgadnięcie, jakie to urządzenie. Użytkownicy zwykle używają tylko jednej przeglądarki i często z jednego komputera, więc może to być dość niezawodne, ale będzie się to różnić w zależności od odbiorców ... technicy są bardziej skłonni do bałagania się z tym i używają większej liczby maszyn / przeglądarek. Ponadto można to nawet połączyć z próbą geolokalizacji adresu IP i wykorzystania tych danych. Ale w każdym razie nie ma rozwiązania, które byłoby poprawne przez cały czas.

cdeszaq
źródło
10

Istnieją wady zarówno w podejściu do plików cookie, jak i bez plików cookie. Ale jeśli możesz wybaczyć niedociągnięcia w podejściu do plików cookie, oto pomysł.

Jeśli korzystasz już z Google Analytics w swojej witrynie, nie musisz pisać kodu, aby samodzielnie śledzić unikalnych użytkowników. Google Analytics robi to za Ciebie za pomocą __utmawartości pliku cookie, zgodnie z opisem w dokumentacji Google . Ponownie wykorzystując tę ​​wartość, nie tworzysz dodatkowej zawartości plików cookie, co zapewnia korzyści w zakresie wydajności przy żądaniach stron.

I możesz napisać kod wystarczająco łatwo, aby uzyskać dostęp do tej wartości lub użyć funkcji tego skryptu getUniqueId() .

Steve Wortham
źródło
Czy otrzymam ten sam identyfikator getUniqueId()w różnych przeglądarkach na tym samym komputerze?
Ankur Akvaliya,
8

Podobnie jak w przypadku poprzednich rozwiązań, pliki cookie są dobrą metodą, należy jednak pamiętać, że identyfikują one przeglądarki . Gdybym odwiedził witrynę w przeglądarce Firefox, a następnie w przeglądarce Internet Explorer, pliki cookie byłyby przechowywane dla obu prób oddzielnie. Niektórzy użytkownicy wyłączają także pliki cookie (ale więcej osób wyłącza JavaScript).

Inną metodą, którą należy wziąć pod uwagę, jest identyfikacja adresu IP i nazwy hosta (należy pamiętać, że mogą się one różnić w przypadku telefonicznych / niestatycznych użytkowników IP, AOL używa również pustych adresów IP). Ponieważ jednak identyfikuje to tylko sieci, może nie działać tak dobrze, jak pliki cookie.

Ross
źródło
Dobry punkt z adresem IP identyfikującym punkt dostępu do sieci - z NAT, za jednym adresem IP mogą kryć się całe kraje, a ty nie będziesz mądrzejszy. W przypadku braku adresu IPv4 nadal widać dość duże firmy lub szkoły / uniwersytety, które dzielą jeden adres IP dla wychodzącego ruchu internetowego.
Piskvor opuścił budynek
6

Pomijając użycie plików cookie, jedyny kompleksowy zestaw identyfikujących atrybutów dostępnych do zapytania znajduje się w nagłówku żądania HTTP. Możliwe jest więc użycie ich niektórych podzbiorów w celu utworzenia pseudo-unikalnego identyfikatora dla agenta użytkownika (tj. Przeglądarki). Co więcej, większość tych informacji prawdopodobnie jest już domyślnie zapisywana w tak zwanym „dzienniku dostępu” oprogramowania serwera WWW, a jeśli nie, można ją łatwo skonfigurować. Następnie można opracować narzędzie, które po prostu skanuje zawartość tego dziennika, tworząc odciski palcówkażdego żądania składającego się, powiedzmy, z adresu IP i ciągu Agenta użytkownika itp. Im więcej dostępnych danych, w tym zawartość określonych plików cookie, podnosi jakość wyjątkowości tego odcisku palca. Chociaż, jak już wielu innych stwierdziło, protokół HTTP nie czyni tego w 100% niezawodnym - w najlepszym razie może to być tylko dość dobry wskaźnik.

Danny Whitt
źródło
6

Kiedy korzystam z urządzenia, które nigdy nie odwiedzało mojej witryny bankowości internetowej, pojawia się monit o dodatkowe uwierzytelnienie. następnie, jeśli wrócę po raz drugi do witryny bankowości internetowej, nie otrzymam dodatkowego uwierzytelnienia ... usunąłem wszystkie pliki cookie w IE i ponownie zalogowałem się na mojej stronie bankowości internetowej, w pełni oczekując, że ponownie zostaną zadane pytania dotyczące uwierzytelnienia. ku mojemu zaskoczeniu nie zostałem zapytany. czy to nie prowadzi do przekonania, że ​​bank robi jakieś tagowanie PC, które nie obejmuje plików cookie?

Jest to dość powszechny typ uwierzytelniania wykorzystywany przez banki.

Załóżmy, że uzyskujesz dostęp do witryny banku za pośrednictwem example-isp.com. Gdy pierwszy raz tam będziesz, zostaniesz poproszony o podanie hasła, a także o dodatkowe uwierzytelnienie. Po przejściu bank wie, że użytkownik „thatisvaliant” jest uwierzytelniony w celu uzyskania dostępu do witryny za pośrednictwem example-isp.com.

W przyszłości nie będzie wymagać dodatkowego uwierzytelnienia (poza hasłem) podczas uzyskiwania dostępu do witryny za pośrednictwem example-isp.com. Jeśli spróbujesz uzyskać dostęp do banku za pośrednictwem another-isp.com, bank ponownie przejdzie tę samą procedurę.

Podsumowując, tym, co identyfikuje bank, jest twój dostawca usług internetowych i / lub blokada sieci na podstawie twojego adresu IP. Oczywiście nie każdy użytkownik Twojego dostawcy usług internetowych to Ty, dlatego bank wciąż prosi o podanie hasła.

Czy kiedykolwiek zdarzyło Ci się zadzwonić do firmy wydającej kartę kredytową, aby sprawdzić, czy wszystko jest w porządku, gdy używasz karty kredytowej w innym kraju? Ta sama koncepcja.

Anirvan
źródło
4

Naprawdę nie można tego zrobić, ponieważ protokoły na to nie pozwalają. Jeśli statyczne adresy IP były powszechnie używane, być może będziesz w stanie to zrobić. Nie są, więc nie możesz.

Jeśli naprawdę chcesz zidentyfikować osoby , zaloguj się.

Ponieważ prawdopodobnie będą się przenosić na różne strony w Twojej witrynie, potrzebujesz sposobu, aby śledzić je podczas ruchu.

Tak długo, jak są zalogowani, a Ty śledzisz ich sesję w witrynie za pomocą plików cookie / parametrów łącza / sygnałów nawigacyjnych / czegokolwiek, możesz być całkiem pewien, że w tym czasie korzystają z tego samego komputera.

Ostatecznie błędne jest stwierdzenie, z jakiego komputera korzystają, jeśli użytkownicy nie korzystają z własnej sieci lokalnej i nie mają statycznych adresów IP.

Jeśli to, co chcesz zrobić, odbywa się we współpracy z użytkownikami, a na jeden plik cookie przypada tylko jeden użytkownik i używają one jednej przeglądarki internetowej, wystarczy użyć pliku cookie.

JohnnySoftware
źródło
3

Pliki cookie nie będą przydatne do określania unikalnych użytkowników. Użytkownik może wyczyścić pliki cookie i odświeżyć witrynę - następnie zostaje sklasyfikowany jako nowy użytkownik.

Myślę, że najlepszym sposobem na zrobienie tego jest wdrożenie rozwiązania po stronie serwera (ponieważ będziesz potrzebować miejsca do przechowywania danych). W zależności od złożoności potrzeb związanych z takimi danymi, musisz określić, co jest klasyfikowane jako wyjątkowa wizyta. Rozsądną metodą byłoby zezwolenie, aby adres IP powrócił następnego dnia i miał niepowtarzalną wizytę. Kilka wizyt z jednego adresu IP w ciągu jednego dnia nie powinno być liczonych jako niepowtarzalne.

Na przykład przy użyciu PHP uzyskanie adresu IP użytkownika i przechowywanie go w pliku tekstowym (lub bazie danych SQL) jest banalne.

Rozwiązanie po stronie serwera będzie działać na wszystkich komputerach, ponieważ będziesz śledzić użytkownika, gdy po raz pierwszy załaduje Twoją witrynę. Nie używaj javascript, ponieważ jest on przeznaczony do skryptów po stronie klienta, a użytkownik może go w każdym razie wyłączyć.

Mam nadzieję, że to pomaga.

różne
źródło
4
Moja żona i ja przeglądamy z czterech różnych komputerów za firewallem NAT w domu. Okazujemy się mieć ten sam adres IP, więc według twojego schematu pokazujemy się jako ten sam użytkownik.
Adam Ness,
Co jeśli w mysql napisać dodatkowe zmienne (wspomniane tutaj panopticlick.eff.org/browser-uniqueness.pdf )? Zatem adres IP byłby taki sam, ale niektóre inne cechy mogą być inne.
Andris
3

Ponieważ chcę, aby rozwiązanie działało na wszystkich komputerach i we wszystkich przeglądarkach (z uzasadnionego powodu), próbuję utworzyć rozwiązanie za pomocą javascript.

Czy to nie jest naprawdę dobry powód, aby nie używać javascript?

Jak powiedzieli inni - pliki cookie są prawdopodobnie najlepszą opcją - po prostu pamiętaj o ograniczeniach.

Draemon
źródło
3

Możesz użyć odcisku palcajs2

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

Następnie możesz sprawdzić wszystkich użytkowników pod kątem istniejących i sprawdzić podobieństwo JSON, więc nawet jeśli ich odcisk palca ulegnie mutacji, nadal możesz je śledzić

zestaw narzędzi
źródło
2

Wydaje mi się, że werdykt jest taki, że nie mogę programowo jednoznacznie zidentyfikować komputera, który odwiedza moją witrynę.

Mam następujące pytanie. Kiedy korzystam z urządzenia, które nigdy nie odwiedzało mojej witryny bankowości internetowej, pojawia się monit o dodatkowe uwierzytelnienie. następnie, jeśli wrócę po raz drugi do witryny bankowości internetowej, nie otrzymam dodatkowego potwierdzenia. czytając odpowiedzi na moje pytanie, zdecydowałem, że musi to być plik cookie. w związku z tym usunąłem wszystkie pliki cookie w przeglądarce IE i ponownie zalogowałem się na mojej stronie bankowości internetowej, w pełni oczekując ponownego pytania o uwierzytelnienie. ku mojemu zaskoczeniu nie zostałem zapytany. czy to nie prowadzi do przekonania, że ​​bank robi jakieś tagowanie PC, które nie obejmuje plików cookie?

ponadto, po wielu poszukiwaniach w Google, znalazłem następującą firmę, która twierdzi, że sprzedaje rozwiązanie, które jednoznacznie identyfikuje maszyny odwiedzające stronę internetową. http://www.the41.com/products.asp .

Doceniam wszystkie dobre informacje, jeśli mógłbyś dokładniej wyjaśnić te sprzeczne informacje, które znalazłem, byłbym bardzo wdzięczny.

to jest wartościowe
źródło
W oparciu o to: the41.com/download/… Wygląda na to, że ich rozwiązaniem jest spowodowanie, aby użytkownik pobrał oprogramowanie, które tworzy unikalny identyfikator oparty na maszynie i przywiązuje go do niektórych danych logowania.
mmacaulay,
Jak już wspomniano, nie wykluczyłeś swojego banku za pomocą pliku cookie Flash. Jak wyczyścić pliki cookie Flash i inne dyskusje na ten temat: tips.vlaurie.com/2007/10/24/…
micahwittman
Domyślam się: bank prawdopodobnie ufa, że ​​jesteś sobą, jeśli (1) znasz swoją nazwę użytkownika, (2) znasz swoje hasło i albo (3a) ma ich plik cookie, albo (3b) pochodzi z adresu IP, który wcześniej posiadał związany z tobą.
Zack Peterson,
2

Zrobiłbym to za pomocą kombinacji plików cookie i plików cookie flash. Utwórz identyfikator GUID i zapisz go w pliku cookie. Jeśli plik cookie nie istnieje, spróbuj odczytać go z pliku cookie flash. Jeśli nadal nie można go znaleźć, utwórz go i zapisz w pliku cookie flash. W ten sposób możesz udostępniać ten sam identyfikator GUID w różnych przeglądarkach.

Eric Hogue
źródło
1

Myślę, że ciasteczka mogą być tym, czego szukasz; w ten sposób większość witryn jednoznacznie identyfikuje odwiedzających.

Steve
źródło
0

Zakładając, że nie chcesz, aby użytkownik miał kontrolę, nie możesz. Sieć nie działa w ten sposób, na co możesz mieć nadzieję, to heurystyka.

Jeśli istnieje możliwość zmuszenia użytkownika do zainstalowania oprogramowania i korzystania z protokołu TCPA, być może uda się coś wyciągnąć.

John Nilsson
źródło
0

Mój post może nie być rozwiązaniem, ale mogę podać przykład, w którym ta funkcja została zaimplementowana.

Jeśli www.supertorrents.orgpo raz pierwszy odwiedzisz stronę rejestracji z komputera, wszystko będzie w porządku. Ale jeśli odświeżysz stronę lub ponownie ją otworzysz, oznacza to, że wcześniej ją odwiedziłeś. Prawdziwe piękno pojawia się tutaj - identyfikuje, nawet jeśli ponownie zainstalujesz system Windows lub inny system operacyjny.

Czytałem gdzieś, że przechowują identyfikator procesora. Chociaż nie mogłem znaleźć sposobu, w jaki sposób to robią, poważnie w to wątpię i mogą do tego użyć adresu MAC.

Na pewno się podzielę, jeśli znajdę jak to zrobić.

Mr Programmer
źródło
www.supertorrents.org nie żyje
zestaw narzędzi
0

Sztuczka:

  1. Utwórz 2 strony rejestracyjne:

    Pierwsza strona rejestracji: bez adresu e-mail lub kontroli bezpieczeństwa (tylko z nazwą użytkownika i hasłem)

    Druga strona rejestracyjna: z wysokim poziomem bezpieczeństwa (prośba o weryfikację adresu e-mail i obraz bezpieczeństwa itp.)

  2. Dla zadowolenia klienta i łatwej rejestracji domyślną stroną rejestracji powinna być (Pierwsza strona rejestracji), ale na (Pierwszej stronie rejestracji) ukryte jest ograniczenie. To ograniczenie własności intelektualnej. Jeśli adres IP próbował zarejestrować się po raz drugi (na przykład krócej niż 1 godzina) zamiast wyświetlać stronę blokowania. możesz automatycznie wyświetlić (Druga strona rejestracji) .

  3. na stronie (Pierwsza strona rejestracji) możesz ustawić (na przykład: blokować 2 próby od 1 adresu IP tylko na 1 godzinę lub 24 godziny), a po (na przykład) 1 godzinie możesz automatycznie otworzyć dostęp z tego adresu IP

Uwaga: (Pierwsza strona rejestracji) i (Druga strona rejestracji) nie powinny znajdować się na osobnych stronach. tworzysz tylko 1 stronę. (na przykład: register.php) i spraw, aby inteligentnie przełączać się między stylem pierwszego PHP a drugim stylem PHP

Mahdi Jazini
źródło
Mahdi Jazini. Wszystko ma rację, ale moje pytanie brzmi: w jaki sposób identyfikujesz adres IP komputera klienckiego. Dzięki.
JENKINS J