Odciski cyfrowe

Odcisk cyfrowy polega na próbie identyfikacji użytkownika, gdy wraca do Twojej witryny, lub identyfikacji tego samego użytkownika w różnych witrynach. Twoja konfiguracja może różnić się pod wieloma względami od konfiguracji innego użytkownika. np. używasz innego typu urządzenia i przeglądarki, masz też inny rozmiar ekranu i zainstalowane czcionki. Jeśli mam zainstalowaną czcionkę „Dejavu Sans”, a Ty jej nie masz, każda strona może odróżnić ją ode mnie przez jej wyszukanie. W ten sposób działa odcisk cyfrowy – tworzysz zbiór tych punktów danych, z których każdy zapewnia więcej sposobów rozróżniania użytkowników.

Bardziej formalna definicja może wyglądać tak: odcisk cyfrowy to czynność polegająca na użyciu oczywistych i nieoczywistych, długotrwałych cech konfiguracji użytkownika, która ma na celu odróżnienie go od jak największej liczby innych użytkowników.

Dlaczego korzystanie z odcisków cyfrowych narusza prywatność użytkownika

W niektórych przypadkach skrajnych, w których odcisk cyfrowy użytkownika jest ważny, na przykład w celu wykrywania oszustw. Odciski cyfrowe mogą być jednak również używane do śledzenia użytkowników w różnych witrynach, a często wykonywane są bez zgody użytkownika lub w niektórych przypadkach na podstawie nieprawidłowej zgody, która nie informuje użytkownika w pełni o tym fakcie. Taki sposób postępowania może być dla nich nieco niepokojący i zaniepokojony.

Odciski cyfrowe polegają na znalezieniu sposobów na ukryte odróżnienie użytkowników od innych. Odciski cyfrowe pozwalają rozpoznać tego samego użytkownika w witrynie lub rozpoznają tego samego użytkownika w 2 różnych profilach przeglądarki jednocześnie. Oznacza to, że odcisków cyfrowych można używać do śledzenia użytkowników w różnych witrynach. Deterministyczne i jawne metody śledzenia, takie jak przechowywanie pliku cookie z unikalnym identyfikatorem właściwym dla użytkownika, mogą być w pewnym stopniu obserwowane przez użytkowników i kontrolowane (w poprzednim module omówiono niektóre z tych podejść). Trudniej jest jednak uniknąć dokładnie odcisków cyfrowych, ponieważ są ukryte, ponieważ opierają się na niezmiennych cechach i najprawdopodobniej dzieje się to w sposób niewidoczny. Dlatego nazywamy je „odciskiem palca”. Najtrudniej jest zmienić odcisk palca – niezależnie od tego, czy jest on cyfrowy czy też znajduje się na końcu palców.

Dostawcy przeglądarek wiedzą, że użytkownicy nie lubią być do nich śledzeni, dlatego stale wdrażają funkcje ograniczające korzystanie z odcisków cyfrowych (niektóre z nich pisaliśmy w poprzednim module). Przyjrzymy się temu, jak te funkcje mogą wpływać na Twoje wymagania biznesowe i dowiesz się, jak robić to, co chcesz, z zachowaniem ochrony prywatności. Chodzi bardziej o to, jak i w jaki sposób ochrona przeglądarki przeciwko odciskiem palca wpływa na Twoje działania, a nie o to, jak uniemożliwi to korzystanie z odcisków cyfrowych.

W praktyce większość deweloperów i większość firm nie musi pobierać odcisków cyfrowych użytkowników. Jeśli Twoja aplikacja wymaga od użytkowników zalogowania się, użytkownicy identyfikują się z Tobą za ich zgodą oraz w sposób, z którego w każdej chwili mogą zrezygnować. Ta metoda chroni prywatność i pozwala sprawdzać, którzy użytkownicy są zalogowani. Twoja aplikacja może w ogóle nie wymagać od użytkowników logowania, co jeszcze lepiej chroni ich prywatność (a dzięki temu gromadzisz tylko potrzebne dane).

Tak

Oceń aplikacje zewnętrzne pod kątem stosowania odcisków cyfrowych. W module innych firm możesz już mieć listę używanych przez Ciebie usług innych firm oraz wysyłanych przez nie żądań sieciowych. Możesz sprawdzić te żądania, aby sprawdzić, które dane są przekazywane z powrotem do podmiotu pierwotnego. Często jest to jednak trudne, ponieważ odcisk cyfrowy jest z natury ukrytym procesem obejmującym wysyłanie próśb o dostęp do danych, które nie podlegają zatwierdzeniu przez użytkownika.

Warto też zapoznać się z polityką prywatności usług i zależności usług innych firm, aby dowiedzieć się, czy są używane odciski cyfrowe. Czasami określa się je mianem „dopasowania prawdopodobnego” lub jako część zestawu technik dopasowywania prawdopodobnego w odróżnieniu od „dopasowania deterministycznego”.

Jak działa odcisk palca

Często Twoje osobiste połączenie wszystkich tych cech jest unikalne dla Ciebie lub co najmniej dla niewielkiej grupy podobnych osób. Dzięki temu można Cię dyskretnie śledzić.

Aside: pasywne i aktywne odcisk palca

Istnieje tu użyteczna różnica między pasywnymi i aktywnymi technikami odcisków cyfrowych. Pasywny odcisk cyfrowy to technika, w której domyślnie używane są informacje przekazywane witrynie, a aktywna technika odcisków cyfrowych polega na bezpośrednim wyszukiwaniu dodatkowych informacji w przeglądarce. To rozróżnienie jest ważne, ponieważ przeglądarki mogą próbować wykrywać i przechwytywać aktywne techniki, czyli je eliminować. Interfejsy API mogą być ograniczone lub znajdować się za oknem z prośbą o udzielenie zgody (a tym samym ostrzegać użytkownika, że są używane, lub pozwolić użytkownikowi domyślnie je odrzucić). Technika pasywna polega na wykorzystaniu danych przekazanych już witrynie, często dlatego, że w najnowszych czasach wyświetlania informacji tak szybko było to możliwe. Przykładem może być np. ciąg klienta użytkownika. Zajmiemy się nim bardziej szczegółowo. Uznano je za przydatne, bo zawiera dużo informacji o przeglądarce, wersji i systemie operacyjnym użytkownika, dzięki czemu witryna może prezentować różne elementy na podstawie tych informacji. Zwiększa to jednak ilość udostępnianych informacji umożliwiających odróżnienie użytkowników, a tym samym ograniczanie dostępu do takich informacji lub ich zamrożenie, tak aby już się nie rozróżniały. Jeśli Twoje działanie zależy od tych informacji – np. używasz różnych gałęzi kodu w zależności od klienta użytkownika – kod może przestać działać, ponieważ przeglądarki coraz częściej blokują lub przerywają te informacje. Najlepszym zabezpieczeniem jest testowanie ( patrz później).

A na marginesie: pomiar odcisków cyfrowych

Techniczna miara ilości informacji dostarczanych przez każdy z tych punktów danych nazywa się entropią i jest mierzona w bitach. Funkcja, która ma wiele różnych możliwych wartości (np. lista zainstalowanych czcionek) może mieć udział w ogólnej liczbie bitów, dlatego jeśli coś bez zaawansowanych możliwości charakterystycznych (np. system operacyjny, którego używasz), może doliczyć tylko ich kilka. Almanac HTTP opisuje, jak istniejące biblioteki odciskowe automatyzują proces łączenia odpowiedzi z wielu różnych interfejsów API w „hasz”, dzięki któremu można zidentyfikować tylko niewielką grupę użytkowników – być może nawet tylko jednego. Maud Nalpas omawia tę kwestię bardziej szczegółowo w tym filmie w YouTube. Krótko mówiąc, wyobraź sobie, że wyświetliła Ci się lista znajomych z ulubioną muzyką, ulubionym jedzeniem i językami, którymi się posługują, ale z usuniętymi imionami i nazwiskami. Istnieje duże prawdopodobieństwo, że dowolna osoba z listy będzie jednoznacznie identyfikować ją wśród Twoich znajomych lub zawęzić listę do niewielkiej liczby osób. Tak działa odcisk palca – lista rzeczy, które Ci się podobają, stanie się „hashtagiem”. Dzięki temu haszowi identyfikacja użytkownika jako tej samej osoby w dwóch różnych, niepołączonych witrynach staje się łatwiejsza, a to jest celem śledzenia, czyli obejście chęci zachowania prywatności.

W jaki sposób przeglądarki przeciwdziałają odciskom cyfrowym?

Co ważne, dostawcy przeglądarek są świadomi wielu różnych sposobów, w jakie witryna (lub inna firma znajdująca się w witrynie) może obliczać odcisk cyfrowy wyróżniający użytkownika lub różne fragmenty informacji decydujące o niepowtarzalności danego odcisku cyfrowego. Niektóre z tych sposobów są jednoznaczne i umyślne. Są to na przykład ciąg klienta użytkownika przeglądarki, który często identyfikuje przeglądarkę, system operacyjny i używaną wersję (i w ten sposób pomaga odróżnić Cię ode mnie, jeśli Ty i ja korzystamy z różnych przeglądarek). Niektóre sposoby nie zostały celowo utworzone jako możliwe do odcisków cyfrowych, ale w efekcie tak się stało. Są to na przykład listy czcionek czy urządzenia audio i wideo dostępne dla przeglądarki. (Przeglądarka nie musi używać tych urządzeń, wystarczy wyświetlić ich listę według nazwy). Niektóre z nich mają wpływ na odcisk cyfrowy tuż po premierze, na przykład dokładnie renderowane pikselowe antyaliasing czcionek na elemencie canvas. Jest ich znacznie więcej, a każdy sposób, w jaki Twoja przeglądarka różni się od mojej, dodaje entropię, co potencjalnie przyczynia się do rozróżniania między Tobą a mnie i identyfikowania konkretnej osoby w najbardziej niepowtarzalny sposób w witrynach. Strona https://amiunique.org ma długą (ale niekompletną) listę potencjalnie funkcji dodawania odcisków cyfrowych, a jeśli użytkownicy nie chcą jej za każdym razem szukać nowych funkcji finansowych (ponieważ użytkownicy oczekują, że ich popularność nie będzie zbyt intensywna).

brak obsługi niektórych zaawansowanych interfejsów API.

Odpowiedź dostawców przeglądarek na wszystkie te metody obliczania odcisku cyfrowego użytkownika polega na znalezieniu sposobów zmniejszenia ilości entropii dostępnej w tych interfejsach API. Najbardziej restrykcyjnym rozwiązaniem jest niewdrażanie ich z góry. Działa to w niektórych popularnych przeglądarkach w przypadku różnych interfejsów API sprzętu i urządzeń (np. NFC i Bluetooth z aplikacji internetowych po stronie klienta). Powody, dla których te rozwiązania nie zostały wdrożone z wykorzystaniem odcisków cyfrowych i prywatności, podano w kwestii problemów z prywatnością i odciskami cyfrowymi. Może to oczywiście wpływać na Twoje aplikacje i usługi: w przeglądarce, w której nie jest on zaimplementowany, nie można w ogóle korzystać z interfejsu API, co może ograniczyć lub całkowicie odmówić zastosowania niektórych sprzętowych metod.

Brama uprawnień użytkownika

Drugą metodą stosowaną przez dostawców przeglądarek jest blokowanie dostępu do interfejsu API lub danych bez wyraźnej zgody użytkownika. Takie podejście jest często stosowane także ze względów bezpieczeństwa – witryna nie powinna robić zdjęć kamerą internetową bez Twojej zgody. Jednak w tym przypadku prywatność i bezpieczeństwo mogą być powiązane z podobnymi zainteresowaniami. Identyfikacja lokalizacji użytkownika jest oczywiście naruszeniem prywatności, ale ma również wpływ na unikalność odcisku palca. Wymaganie uprawnień do sprawdzania geolokalizacji nie zmniejsza dodatkowej entropii, którą lokalizacja dodaje do unikalności odcisku palca, ale w zasadzie eliminuje używanie geolokalizacji do odcisków cyfrowych, ponieważ nie odbywa się to już w niewidoczny sposób. Odcisk palca polega głównie na ukradkowym odróżnianiu użytkowników od siebie. Jeśli chcesz dać użytkownikowi znać, że próbujesz go zidentyfikować, nie musisz stosować odcisków cyfrowych – poproś użytkownika o utworzenie konta i zalogowanie się za jego pomocą.

Dodawanie nieprzewidywalności

Trzecią metodą stosowaną w niektórych przypadkach jest „przemywanie” odpowiedzi z interfejsów API przez dostawców przeglądarek, dzięki czemu są one mniej szczegółowe, a tym samym mniej identyfikowane. Ta funkcja została opisana jako część mechanizmu losowych odpowiedzi w module danych i to, co możesz zrobić podczas zbierania danych od użytkowników, aby uniknąć przypadkowego zbierania informacji umożliwiających identyfikację. Dostawcy przeglądarek mogą stosować takie podejście do danych interfejsu API udostępnianych aplikacjom internetowym i innym firmom. Przykładem mogą być interfejsy API o bardzo dokładnej sygnaturze czasowej używane do pomiaru wydajności strony z window.performance.now(). Przeglądarka zna te wartości z dokładnością do mikrosekund, ale precyzję zwracanych wartości jest celowo zaokrąglana do najbliższych 20 mikrosekund. Ma to na celu uniknięcie ich użycia w odciskach cyfrowych (a co więcej, aby uniknąć ataków czasowych). Chcemy, aby interfejsy API pozostawały przydatne, ale by odpowiedzi były mniej identyfikowalne. W zasadzie chcemy wzmocnić odporność psychiczną, aby Twoje urządzenie wyglądało jak urządzenie innych osób, a nie było jak własne. Z tego powodu Safari przedstawia uproszczoną wersję konfiguracji systemu.

Egzekwowanie budżetu dotyczącego prywatności

Budżet ochrony prywatności to propozycja sugerująca, że przeglądarki szacują informacje ujawniane przez każdą platformę do pobierania odcisków cyfrowych. Nie został on jeszcze zaimplementowany w przeglądarkach. Celem jest umożliwienie korzystania z zaawansowanych interfejsów API przy jednoczesnym zachowaniu prywatności użytkowników. Więcej informacji o ofercie dotyczącej budżetu dotyczącego prywatności

Korzystaj z szerokiego środowiska testowego

Wszystkie te czynniki wpłyną na sposób tworzenia aplikacji i usług. W tym przypadku istnieje wiele różnych odpowiedzi i podejść w różnych przeglądarkach i na różnych platformach. Oznacza to, że testowanie pracy w wielu różnych środowiskach jest krytyczne. Jest to oczywiście zawsze ważne, ale uzasadnione jest przypuszczenie, że dany mechanizm renderujący HTML ma stałą wartość, niezależnie od tego, w jakiej przeglądarce lub na której platformie się znajduje (dlatego testowanie tylko w jednej przeglądarce opartej na Blinku może być kuszące). Zdecydowanie nie ma to miejsca w przypadku korzystania z interfejsów API właśnie dlatego, że przeglądarki, które korzystają z tego samego mechanizmu renderowania, mogą znacznie różnić się pod względem wzmocnienia powierzchni interfejsu API przed odciskiem cyfrowym.

Tak

  • Sprawdzaj swoje statystyki i odbiorców, aby wybrać przeglądarki, na które musisz się skupić podczas testowania.
  • Możesz to zrobić na urządzeniach: Firefox, Chrome, Edge, Safari na komputerze, Chrome i Samsung Internet na Androidzie oraz Safari na iOS. Możesz w ten sposób przetestować 3 główne silniki renderujące (Gecko w Firefoksie, różne rozwidlenie Blink w Chrome, Edge i Samsung Internet oraz Webkit w Safari) oraz na urządzeniach mobilnych i komputerach.
  • Jeśli Twoja witryna może być używana również na mniej popularnych urządzeniach, takich jak tablety, smartwatche czy konsole do gier, przetestuj ją również na nich. Niektóre platformy sprzętowe mogą być opóźnione w zakresie aktualizacji przeglądarek na urządzeniach mobilnych i komputerach, co oznacza, że niektóre interfejsy API mogą nie być zaimplementowane lub niedostępne w przeglądarkach na tych platformach.
  • Wykonaj test za pomocą co najmniej 1 przeglądarki, która jako czynnik motywacyjny twierdzi, że prywatność użytkownika jest ważna. Uwzględnij nadchodzące przedpremierowe i testowe wersje najpopularniejszych przeglądarek (w miarę możliwości i o ile są dla Ciebie dostępne): przedpremierowa technologia Safari, Canary Chrome lub wersja beta przeglądarki Firefox. To daje największą szansę na wykrycie awarii interfejsu API i zmian, które mają wpływ na Twoje witryny, zanim te zmiany wpłyną na użytkowników. Pamiętaj też o środowiskach użytkowników – w odniesieniu do wszelkich udostępnianych przez Ciebie statystyk. Jeśli w Twojej grupie użytkowników jest duża liczba starszych telefonów z Androidem, uwzględnij je w testach. Większość osób nie ma szybkiego sprzętu i najnowszych wersji, które udostępnia zespół programistów.
  • Przeprowadź test, używając czystego profilu oraz trybu przeglądania incognito/prywatnego. Prawdopodobnie masz już przyznane uprawnienia wymagane w swoim profilu osobistym. Sprawdź, co się stanie, gdy odmówisz uprawnień dostępu do witryny w przypadku dowolnego pytania.
  • Przetestuj swoje strony w trybie ochrony przed odciskiem palca w przeglądarce Firefox. Jeśli to zrobisz, pojawią się okna z prośbą o uprawnienia, jeśli Twoja strona próbuje pobrać odcisk cyfrowy lub w przypadku niektórych interfejsów API dane będą rozmyte. Dzięki temu sprawdzisz, czy uwzględnione w Twojej usłudze firmy zewnętrzne korzystają z danych możliwych do odcisków cyfrowych, czy też Twoje usługi są od tego zależne. Możesz się wtedy zastanowić, czy celowe rozmycie nie powinno utrudniać wykonania tego, czego potrzebujesz. Rozważ wprowadzenie odpowiednich poprawek, aby uzyskać dane z innego źródła, zrezygnować z nich lub użyć mniej szczegółowych danych.
  • Jak już wspomnieliśmy w module dla firm zewnętrznych, warto też skontrolować zależności usług zewnętrznych, aby sprawdzić, czy korzystają one z technik odcisków cyfrowych. Pasywne odciski cyfrowe są trudne do wykrycia (i nie są możliwe, jeśli inna firma robi to na swoim serwerze). Tryb odcisków cyfrowych może oznaczać niektóre techniki odcisków cyfrowych. Szukając zastosowania elementu navigator.userAgent lub nieoczekiwanego tworzenia obiektów <canvas>, można też znaleźć rozwiązania, które zasługują na dokładniejsze przeanalizowanie. Warto też poszukać zastosowania terminu „dopasowanie prawdopodobieństwa” w marketingu lub materiałach technicznych opisujących firmy zewnętrzne, ponieważ może to czasem oznaczać stosowanie odcisków cyfrowych.

Narzędzia do testowania w różnych przeglądarkach

Testowanie kodu pod kątem ochrony prywatności jest trudne do zautomatyzowania, a rzeczy, na które należy zwrócić uwagę przy testowaniu ręcznym, opisaliśmy wcześniej. Co się stanie, jeśli odmówisz na przykład uprawnień do korzystania z interfejsów API, do których ta witryna próbuje uzyskać dostęp, i w jaki sposób zostanie to przedstawione użytkownikowi? Zautomatyzowany test nie pozwala ocenić, czy witryna próbuje zdobyć zaufanie użytkowników lub na odwrót zachęcić użytkowników do jej zaufania lub na odwrót.

Jednak po kontroli witryny testowanie interfejsów API w celu potwierdzenia, że w nowszych wersjach przeglądarek (ani w nadchodzących wersjach „beta” i „podglądowych”) nie działa w żaden sposób, można zautomatyzować i przeważyć w ramach dotychczasowego pakietu testowego. Gdy korzystasz z powierzchni interfejsów API w automatycznych narzędziach testowych, większość przeglądarek umożliwia pewien poziom kontroli nad tym, które interfejsy API i funkcje są dostępne. Chrome robi to za pomocą przełączników wiersza poleceń, tak samo jak w Firefoksie. Dostęp do tych opcji w konfiguracji narzędzia testowego umożliwia przeprowadzanie niektórych testów z wyłączonymi lub włączonymi interfejsami API. (Zobacz na przykład, jak dodawać flagi przeglądarki przy uruchamianiu, korzystając na przykład z wtyczki do uruchamiania przeglądarki firmy Cypress czy parametru start.args firmy Puppeteer).

Używaj ciągu znaków klienta użytkownika tylko w przypadku przybliżonych informacji

Weźmy jeszcze jeden przykład: przeglądarki od początku istnienia sieci wysyłały swój opis przy każdym żądaniu w nagłówku klienta użytkownika HTTP. Już od niemal dawna ludzie namawiają programistów, aby nie wykorzystywali zawartości nagłówka klienta użytkownika do wyświetlania innych treści w różnych przeglądarkach. Twórcy stron internetowych i tak robią to i tak, a w niektórych przypadkach pewne uzasadnienia. Przeglądarki nie chcą być identyfikowane dla wygody witryn, więc każda przeglądarka podszywa się pod inne przeglądarki, a ciąg znaków klienta użytkownika wygląda mniej więcej tak:

Mozilla/5.0 (Linux; Android 6.0.1; SGP771 Build/32.2.A.0.253; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36.

Chodzi między innymi o przeglądarkę Mozilla/5.0, która została wydana w tym samym czasie, gdy pierwsi astronauci weszli na pokład Międzynarodowej Stacji Kosmicznej ponad 20 lat temu. Ciąg znaków klienta użytkownika jest oczywiście bogatym źródłem entropii dla odcisków cyfrowych. Aby ograniczyć możliwość odcisków cyfrowych, producenci przeglądarek już zablokowali nagłówek klienta użytkownika lub pracują nad tym. To kolejny przykład zmiany danych dostarczanych przez interfejs API bez konieczności całkowitego usuwania interfejsu API. Wysłanie pustego nagłówka klienta użytkownika spowoduje błędy w niezliczonych witrynach, które zakładają, że taka strona istnieje. Ogólnie rzecz biorąc, przeglądarki usuwają z nich niektóre szczegóły i od tego czasu niemal się nie zmieniają. (Możesz to zaobserwować w Safari, Chrome i Firefoksie). Ochrona przed pobieraniem odcisków cyfrowych oznacza, że nie można już polegać na dokładności nagłówka klienta użytkownika, a jeśli to robisz, ważne jest znalezienie alternatywnych źródeł danych.

Dla jasności – dane dotyczące klienta użytkownika nie zostaną całkowicie wycofane, tylko będą dostępne z większą szczegółowością lub czasami mogą być niedokładne, ponieważ w raportach może być podawana starsza, ale niezmienna liczba. Na przykład w Firefoksie, Safari i Chrome zgłoszony numer wersji systemu macOS wynosi do 10 lat (więcej informacji znajdziesz w sekcji Aktualizacja dotycząca redukcji ciągu znaków klienta użytkownika). Szczegółowe informacje o tym, jak Chrome planuje zmniejszyć ilość danych w ciągu znaków klienta użytkownika, znajdziesz na stronie Redukcja klienta użytkownika. Krótko mówiąc, raportowany numer wersji przeglądarki będzie zawierał tylko wersję główną (numer wersji będzie więc wyglądać tak: 123.0.0.0 nawet wtedy, gdy przeglądarka to 123.10.45.108), a jej wersja nie będzie zawierać szczegółów i nie zostanie w niej zwiększona. Jeśli zatem fikcyjna wersja Chrome 123.45.67.89 uruchomiona w wymyślonym systemie „Windows 20” będzie mieć taki numer:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36

Podstawowe informacje (wersja przeglądarki) są nadal dostępne – to Chrome 123 w systemie Windows. Jednak informacje o podmiotach zależnych (architektura układu, która wersja Windows, która wersja Safari jest imitowana, wersja podrzędna przeglądarki) nie będą już dostępne po blokadzie.

Porównaj to z „aktualnym” klientem użytkownika Chrome na innej platformie:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36,

i widać, że jedyną różnicą jest numer wersji Chrome (104) i identyfikator platformy.

Podobnie ciąg znaków klienta użytkownika w Safari zawiera platformę i numer wersji przeglądarki Safari oraz wersję systemu operacyjnego na iOS, ale reszta jest zablokowana. Wyobraź sobie więc w wymyślonej wersji Safari 1234.5.67 uruchomionej w wymyślonym systemie macOS 20 jego klient użytkownika może wyglądać tak:

Mozilla/5.0 (Macintosh; **Intel Mac OS X 10_20_0**) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15,

a w wymyślonej wersji iOS 20 może to być:

Mozilla/5.0 (iPhone; CPU **iPhone OS 20_0** like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/**20.0 Mobile/15E148 Safari/605.1.15**.

Podstawowe informacje (np. Safari, można je znaleźć w systemie iOS lub macOS), a iOS w tej przeglądarce nadal podaje numer wersji iOS. Jednak znaczna część informacji pomocniczych, które były dostępne w przeszłości, została zablokowana. Co ważne, obejmuje to numer wersji przeglądarki Safari, który nie zawsze jest dostępny.

Zmiany dotyczące zgłoszonego klienta użytkownika były przedmiotem gorącej debaty. Na stronie https://github.com/WICG/ua-client-hints#use-cases summarises podsumowano niektóre argumenty i przyczyny tej zmiany, a Rowan Merewood ma prezentację z opisem strategii zrezygnowania z używania klienta użytkownika w celu zróżnicowania UA w kontekście UA.

Rozmycie

Fuzzing to termin z praktyki bezpieczeństwa, w którym interfejsy API są wywoływane z nieoczekiwanymi wartościami w nadziei, że będą one właściwie obsługiwać te nieoczekiwane wartości i naruszają bezpieczeństwo. Programiści stron internetowych powinni znać tajniki skryptów w witrynach (XSS), które obejmują dodawanie do strony złośliwego skryptu. Często dlatego, że strona nie zmienia znaczenia wstawionego kodu HTML (dlatego przeprowadzasz zapytanie z tekstem <script>, który się w nim znajduje). Programiści backendu będą wiedzieć o wstrzykiwaniu SQL, w którym zapytania do bazy danych, które niewłaściwie sprawdzają dane wejściowe użytkownika, ujawniają problemy z zabezpieczeniami (co zostało dobrze pokazane w Xkcd z użyciem Little Bobby Tables). Rozmycie, czyli testowanie rozmywające, jest lepiej używane w przypadku zautomatyzowanych prób dostarczania do interfejsu API wielu różnych nieprawidłowych lub nieoczekiwanych danych wejściowych oraz sprawdzania wyników pod kątem wycieków danych, awarii lub innych problemów z obsługą. To wszystkie przykłady celowego podawania niedokładnych informacji. Tutaj jednak robi to z wyprzedzeniem przez przeglądarki (przez celowe wprowadzanie nieprawidłowych informacji o kliencie użytkownika), aby zachęcić programistów do zaprzestania polegania na tych danych.

Tak

  • Sprawdź, czy w bazie kodu bazuje on na ciągu znaków klienta użytkownika (wyszukiwanie navigator.userAgent prawdopodobnie pozwoli znaleźć większość wystąpień w kodzie po stronie klienta, a kod backendu prawdopodobnie będzie szukać nagłówka User-Agent jako nagłówka) z uwzględnieniem Twoich zależności.
  • Jeśli znajdziesz zastosowania we własnym kodzie, sprawdź, czego dotyczy ten kod, i znajdź inny sposób na to rozróżnienie (lub znajdź zależność zastępczą albo zacznij pracować nad zależność na wyższym poziomie, zgłaszając problemy lub sprawdzając dostępność aktualizacji). Czasami w celu obejścia błędów konieczne jest rozróżnianie przeglądarek, ale po zablokowaniu klienta użytkownika coraz częściej nie można tego robić.
  • Może to być bezpieczne. Jeśli używasz tylko podstawowych wartości marki, wersji głównej i platformy, prawie na pewno będą one dostępne i będą poprawne w ciągu znaków klienta użytkownika.
  • MDN zawiera opis dobrych sposobów unikania polegania na ciągu znaków klienta użytkownika („sniffing przeglądarki”) – głównym z nich jest wykrywanie funkcji.
  • Jeśli w jakiś sposób polegasz na ciągu znaków klienta użytkownika (nawet przy korzystaniu z kilku podstawowych wartości, które pozostają przydatne), warto przeprowadzić testy z użyciem nowych klientów użytkownika, które pojawią się w nowych wersjach przeglądarek. Nowe wersje przeglądarek można testować samodzielnie za pomocą kompilacji w wersji beta lub w wersji testowej technologii. Można też ustawić niestandardowy ciąg znaków klienta użytkownika na potrzeby testów. Podczas programowania lokalnego możesz zastąpić ciąg klienta użytkownika w Chrome, Edge, Firefoksie i Safari, aby sprawdzić, jak Twój kod postępuje z różnymi wartościami klienta użytkownika otrzymywanymi od użytkowników.

Wskazówki dla klienta

Jedną z głównych propozycji przekazywania takich informacji są wskazówki klienta User-Agent. Nie są one jednak obsługiwane we wszystkich przeglądarkach. Obsługa przeglądarek przekazuje 3 nagłówki: Sec-CH-UA, który podaje markę i numer wersji przeglądarki, Sec-CH-UA-Mobile (oznaczający, że żądanie pochodzi z urządzenia mobilnego) oraz Sec-CH-UA-Platform, który określa system operacyjny. Analizowanie tych nagłówków jest trudniejsze, niż mogłoby się wydawać, ponieważ są to nagłówki uporządkowane, a nie proste ciągi znaków. Jest to wymuszane przez przeglądarki wysyłające wartości „podejrzane”, które w razie nieprawidłowej analizy są przetwarzane nieprawidłowo. Jest to tak samo jak wcześniej przykład „testowania rozmycia” wykonywanego z wyprzedzeniem przez przeglądarkę. Programista korzystający z tych danych musi obsługiwać je prawidłowo, ponieważ dane są zaprojektowane w taki sposób, że nieprawidłowa lub leniwa analiza może generować negatywne wyniki, np. wyświetlanie nazw marek, które nie istnieją, lub ciągi znaków, które nie zamykają się prawidłowo). Na szczęście te dane są też udostępniane przez przeglądarkę bezpośrednio do JavaScriptu pod nazwą navigator.userAgentData, która w obsługiwanej przeglądarce może wyglądać mniej więcej tak:

{
  "brands": [
    {
    "brand": " Not A;Brand",
    "version": "99"
    },
    {
    "brand": "Chromium",
    "version": "96"
    },
    {
    "brand": "Google Chrome",
    "version": "96"
    }
  ],
  "mobile": false
}