Buduję narzędzie analityczne i obecnie mogę uzyskać adres IP użytkownika, przeglądarkę i system operacyjny od jego agenta użytkownika.
Zastanawiam się, czy istnieje możliwość wykrycia tego samego użytkownika bez korzystania z plików cookie lub lokalnego magazynu? Nie oczekuję tutaj przykładów kodu; tylko prosta wskazówka, gdzie szukać dalej.
Zapomniałem wspomnieć, że musi być kompatybilny z różnymi przeglądarkami, jeśli jest to ten sam komputer / urządzenie. Zasadniczo zależy mi na rozpoznaniu urządzenia, a nie na użytkowniku.
javascript
php
http-headers
fingerprinting
slash197
źródło
źródło
Odpowiedzi:
Wprowadzenie
Jeśli dobrze Cię rozumiem, musisz zidentyfikować użytkownika, dla którego nie masz unikalnego identyfikatora, więc chcesz dowiedzieć się, kim on jest, dopasowując dane losowe. Nie możesz niezawodnie przechowywać tożsamości użytkownika, ponieważ:
Aplet Java lub obiekt Com byłby łatwym rozwiązaniem wykorzystującym skrót informacji o sprzęcie, ale w dzisiejszych czasach ludzie są tak świadomi bezpieczeństwa, że trudno byłoby skłonić ludzi do zainstalowania tego rodzaju programów w ich systemie. To powoduje, że utkniesz z używaniem plików cookie i innych podobnych narzędzi.
Pliki cookie i inne podobne narzędzia
Możesz rozważyć utworzenie profilu danych, a następnie użycie testów prawdopodobieństwa do zidentyfikowania prawdopodobnego użytkownika . Profil przydatny do tego celu można wygenerować za pomocą kombinacji następujących elementów:
Pozycje, które wymieniłem, to oczywiście tylko kilka możliwych sposobów jednoznacznej identyfikacji użytkownika. Jest ich znacznie więcej.
Z tym zestawem losowych elementów danych, na podstawie których można zbudować profil danych, co dalej?
Następnym krokiem jest opracowanie logiki rozmytej lub, jeszcze lepiej, sztucznej sieci neuronowej (która wykorzystuje logikę rozmytą). W obu przypadkach chodzi o wytrenowanie systemu, a następnie połączenie jego treningu z wnioskiem bayesowskim, aby zwiększyć dokładność wyników.
NeuralMesh biblioteki dla PHP pozwala na generowanie sztucznych sieci neuronowych. Aby zaimplementować wnioskowanie Bayesa, skorzystaj z następujących łączy:
W tym momencie możesz pomyśleć:
Po co tyle matematyki i logiki w pozornie prostym zadaniu?
Zasadniczo dlatego, że nie jest to proste zadanie . To, co próbujesz osiągnąć, to w rzeczywistości czyste prawdopodobieństwo . Na przykład biorąc pod uwagę następujących znanych użytkowników:
Kiedy otrzymasz następujące dane:
Pytanie, które zasadniczo zadajesz, brzmi:
Jakie jest prawdopodobieństwo, że otrzymane dane (B + C + E + G + F + K) to w rzeczywistości Użytkownik1 lub Użytkownik2? A który z tych dwóch dopasowań jest najbardziej prawdopodobny?
Aby skutecznie odpowiedzieć na to pytanie, musisz zrozumieć format częstotliwości vs prawdopodobieństwo i dlaczego wspólne prawdopodobieństwo może być lepszym podejściem. Szczegóły są zbyt duże, aby się tutaj zagłębić (dlatego podaję linki), ale dobrym przykładem może być aplikacja Kreatora diagnostyki medycznej , która wykorzystuje kombinację objawów do identyfikacji możliwych chorób.
Pomyśl przez chwilę o serii punktów danych, które składają się na Twój profil danych (B + C + E + G + F + K w powyższym przykładzie) jako o objawach , a nieznani użytkownicy jako o chorobach . Identyfikując chorobę, możesz dodatkowo zidentyfikować odpowiednie leczenie (traktuj tego użytkownika jako Użytkownika1).
Oczywiście choroba, dla której zidentyfikowaliśmy więcej niż 1 objaw, jest łatwiejsza do zidentyfikowania. W rzeczywistości, im więcej Objawów możemy zidentyfikować, tym łatwiejsza i dokładniejsza jest nasza diagnoza.
Czy są jakieś inne alternatywy?
Oczywiście. Alternatywą może być stworzenie własnego prostego algorytmu punktacji i oparcie go na dokładnych dopasowaniach. Nie jest to tak wydajne jak prawdopodobieństwo, ale może być prostsze do wdrożenia.
Jako przykład rozważ ten prosty wykres wyników:
Za każdą informację, którą możesz zebrać w ramach danego żądania, przyznaj odpowiednią ocenę, a następnie użyj opcji Ważność, aby rozwiązać konflikty, gdy wyniki są takie same.
Dowód koncepcji
Aby uzyskać prosty dowód słuszności koncepcji, spójrz na Perceptron . Perceptron to model RNA, który jest powszechnie używany w zastosowaniach do rozpoznawania wzorców. Istnieje nawet stara klasa PHP, która doskonale ją implementuje, ale prawdopodobnie będziesz musiał ją zmodyfikować do swoich celów.
Pomimo tego, że jest świetnym narzędziem, Perceptron nadal może zwracać wiele wyników (możliwych dopasowań), więc użycie porównania wyniku i różnicy jest nadal przydatne do określenia najlepszego z tych dopasowań.
Założenia
Oczekiwanie
Kod dowodu koncepcji
Wynik:
Print_r z "D":
Jeśli debugowanie = true, będzie można zobaczyć dane wejściowe (czujnik i żądane), masy początkowe, dane wyjściowe (czujnik, suma, sieć), błąd, korektę i masy końcowe .
x1 do x20 reprezentują funkcje konwertowane przez kod.
Oto demo online
Użyta klasa:
Zmodyfikowana klasa perceptronu
Wniosek
Identyfikacja użytkownika bez unikalnego identyfikatora nie jest prostym ani prostym zadaniem. zależy to od zebrania wystarczającej ilości losowych danych, które możesz zebrać od użytkownika różnymi metodami.
Nawet jeśli zdecydujesz się nie używać sztucznej sieci neuronowej, proponuję przynajmniej użyć prostej macierzy prawdopodobieństwa z priorytetami i prawdopodobieństwami - i mam nadzieję, że kod i przykłady podane powyżej wystarczą, aby kontynuować.
źródło
Implement Bayesian inference using PHP
, wszystkie 3 części. -Frequency vs Probability
-Joint Probability
-Input (Sensor & Desired), Initial Weights, Output (Sensor, Sum, Network), Error, Correction and Final Weights
Ta technika (wykrywania tych samych użytkowników bez plików cookie - lub nawet bez adresu IP) nazywana jest odciskiem palca przeglądarki . Zasadniczo indeksujesz jako informacje o przeglądarce, jak tylko możesz - lepsze wyniki można osiągnąć za pomocą javascript, flash lub java (np. Zainstalowane rozszerzenia, czcionki itp.). Następnie możesz zapisać zaszyfrowane wyniki, jeśli chcesz.
Nie jest nieomylne, ale:
Więcej informacji:
źródło
Wspomniany powyżej odcisk palca działa, ale nadal może wystąpić kolizja.
Jednym ze sposobów jest dodanie UID do adresu URL każdej interakcji z użytkownikiem.
http://someplace.com/12899823/user/profile
Gdzie każdy link w witrynie jest dostosowany za pomocą tego modyfikatora. Jest to podobne do sposobu, w jaki ASP.Net pracował przy użyciu danych FORM między stronami.
źródło
Czy zajrzałeś do Evercookie ? Może, ale nie musi, działać w różnych przeglądarkach. Wyciąg z ich strony.
„Jeśli użytkownik zostanie zapisany w jednej przeglądarce i przełączy się na inną, o ile nadal będzie miał plik cookie Local Shared Object, plik cookie zostanie odtworzony w obu przeglądarkach”.
źródło
Możesz to zrobić za pomocą buforowanego pliku png, byłoby to nieco zawodne (różne przeglądarki zachowują się inaczej i nie powiedzie się, jeśli użytkownik wyczyści pamięć podręczną), ale jest to opcja.
1: skonfiguruj bazę danych, która przechowuje unikalny identyfikator użytkownika jako ciąg szesnastkowy
2: utwórz plik genUser.php (lub w jakimkolwiek innym języku), który generuje identyfikator użytkownika, przechowuje go w bazie danych, a następnie tworzy prawdziwy kolor .png z wartości tego ciągu szesnastkowego (każdy piksel będzie miał 4 bajty) i zwróć to do przeglądarki. Pamiętaj, aby ustawić typ zawartości i nagłówki pamięci podręcznej.
3: w HTML lub JS utwórz obraz podobny do
<img id='user_id' src='genUser.php' />
4: narysuj ten obraz na płótnie
ctx.drawImage(document.getElementById('user_id'), 0, 0);
5: odczytaj bajty tego obrazu za pomocą
ctx.getImageData
i zamień liczby całkowite na ciąg szesnastkowy.6: To jest twój unikalny identyfikator użytkownika, który jest teraz przechowywany w pamięci podręcznej na komputerze użytkownika.
źródło
I'm after device recognition
jest gratisem za to, czego chce, i rozwija tutaj: stackoverflow.com/questions/15966812/…Na podstawie tego, co powiedziałeś:
Najlepszym sposobem na to jest przesłanie adresu mac, który jest identyfikatorem karty sieciowej.
Możesz rzucić okiem na ten post: Jak mogę uzyskać adres MAC i adres IP podłączonego klienta w PHP?
źródło
Możesz to zrobić za pomocą etagów. Chociaż nie jestem pewien, czy to legalne, ponieważ złożono kilka pozwów.
Jeśli odpowiednio ostrzegasz swoich użytkowników lub masz coś w rodzaju witryny intranetowej, może być w porządku.
źródło
Możesz potencjalnie utworzyć obiekt BLOB do przechowywania identyfikatora urządzenia ...
Wadą jest to, że użytkownik musi pobrać obiekt blob ( można wymusić pobieranie ), ponieważ przeglądarka nie może uzyskać dostępu do systemu plików, aby bezpośrednio zapisać plik.
odniesienie:
https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobs
źródło
Nieefektywne, ale może dać pożądane rezultaty, byłoby sondowanie API po twojej stronie. Mieć proces w tle po stronie klienta, który wysyła dane użytkownika w określonych odstępach czasu. Będziesz potrzebować identyfikatora użytkownika, aby wysłać go do swojego interfejsu API. Gdy już to zrobisz, możesz przesłać wszelkie informacje związane z tym unikalnym identyfikatorem.
Eliminuje to potrzebę stosowania plików cookie i lokalnego przechowywania.
źródło
Nie mogę uwierzyć, że http://browserspy.dk nadal nie zostało tu wymienione! Witryna opisuje wiele funkcji (w zakresie rozpoznawania wzorców), które można wykorzystać do zbudowania klasyfikatora.
I nie bez powodu, do oceny funkcji sugerowałbym w szczególności Support Vector Machines i libsvm .
źródło
Śledzić je podczas sesji lub między sesjami?
Jeśli Twoja witryna korzysta z protokołu HTTPS Everywhere, możesz użyć identyfikatora sesji TLS do śledzenia sesji użytkownika
źródło
będzie to wymagało od użytkownika dobrowolnego zainstalowania identyfikatora.
po zainstalowaniu wtyczki odcisk palca dowolnej przeglądarki (z włączoną wtyczką) będzie zawierał tę konkretną wtyczkę. Aby zwrócić informacje na serwer, potrzebny jest algorytm do skutecznego wykrywania wtyczki po stronie klienta, w przeciwnym razie użytkownicy przeglądarek IE i Firefox> = 28 będą potrzebować tabeli możliwych prawidłowych identyfikatorów.
Wymaga to stosunkowo dużych inwestycji w technologię, która prawdopodobnie zostanie wyłączona przez dostawców przeglądarek. Kiedy jesteś w stanie przekonać użytkowników do zainstalowania wtyczki, mogą również istnieć opcje, takie jak instalacja lokalnego serwera proxy , użycie VPN lub załatanie sterowników sieciowych.
Użytkownicy, którzy nie chcą być identyfikowani (lub ich komputery), zawsze znajdą sposób, aby temu zapobiec.
źródło
this will require the user to willingly install the identifier.
nie jest prawdopodobnie tym, co oznaczał oryginalny plakat (OP).