Zdarzyło Wam się, że jakaś strona rozpoznała Wasze urządzenie? Albo nawet utrudniła Wam życie, bo coś jej w nim nie pasowało?

Kolaż pokazujący cztery komunikaty informujące, że nie rozpoznano naszego urządzenia.

Skąd odwiedzane strony wiedzą, jakiego używamy urządzenia? Dzięki tzw. user agentowi, czyli identyfikatorowi użytkownika.
To ciąg znaków mówiący o tym, jakiej używacie przeglądarki i systemu operacyjnego.

Czasem się to przydaje. Pozwala na przykład dobrać wysyłaną nam stronkę do możliwości urządzenia.

Ale oczywiście user agent, zdradzając coś o nas, ma też ciemne strony.
Po pierwsze, jest dodatkowym punktem danych pozwalającym nas identyfikować.
Po drugie, pozwala stronom manipulować ludźmi przez zniechęcanie do niektórych przeglądarek. Nawet jeśli wszystko by w nich normalnie działało.

W tym wpisie krótko omówię user agenta, sposoby w jakie jest nadużywany i metody pozwalające go zamaskować.

Czym jest user agent

Krótko: to tekst mówiący coś o naszej przeglądarce i systemie operacyjnym.

A dokładniej: To jedna z informacji zawartych w nagłówkach HTTP, które opisałem dokładniej w pierwszym wpisie z serii.
To część naszej „etykiety” lub „wizytówki”, którą przeglądarka wysyła wszystkim odwiedzanym przez nas stronom.

User agent nie ma odgórnie narzuconej postaci, teoretycznie może być dowolnym tekstem.
W praktyce powinien zawierać nazwę i wersję przeglądarki oraz systemu operacyjnego.

Twój wygląda tak:

Masz wyłączony JavaScript!

Jeśli używasz mainstreamowej przeglądarki, zapewne gdzieś w tekście zauważysz jej nazwę oraz nazwę swojego systemu operacyjnego.

Jest tam też trochę innych bzdetów, które mogą Ci nic nie mówić. Albo nawet kojarzyć się z całkiem innymi przeglądarkami.

Spójrzmy na inny przykład. Jeśli użyję swojej przeglądarki Chromium, mój user agent wygląda tak:

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

User agent dla względnie nowego Chromium. Kolorowe oznaczenia dodane przeze mnie.

Widać po nim, że:

  • używam 64-bitowego systemu Linux (Linux x86_64)
  • …i Chrome’a w wersji 89 (Chrome/89.0.4389.90)

Ale co tu robią pozostałe rzeczy?

  • Mozilla to firma, której własnością jest przeglądarka Firefox. A ja przecież używam Chromium.
  • Safari z kolei to przeglądarka firmy Apple. A AppleWebKit to jej silnik. Nie używam ani jednego, ani drugiego.

Okazuje się, że te wszystkie dodatkowe bzdety są tu dla kompatybilności. Żeby programy patrzące na UA, nie rozpoznając niektórych nazw, znalazły przynajmniej cokolwiek znajomego.

Ciekawostka

Takie podszywanie się pod inne user agenty ma długą historię i sięga tak zwanych wojen przeglądarkowych.

Rozpoczętych, gdy Internet Explorer od Microsoftu dopiero raczkował, a do przeglądania internetu używano głównie Netscape Navigatora.

Żeby napompować sobie popularność, IE podszywał się pod Netscape'a, żeby bez problemu działały na nim wszystkie strony. Kolejne przeglądarki też podszywały się pod dobrze zakorzenionych poprzedników, a przeciętny user agent był coraz dłuższy. Aż dotarliśmy do współczesności.

Subciekawostka: firma odpowiedzialna za Netscape Navigatora to późniejsza Mozilla – twórcy Firefoksa! Co więcej, sama nazwa Mozilla też ma wojenne korzenie.

Na początku był to kryptonim Netscape'a i zarazem skrót od Mosaic killer.
Czemu killer? Bo planowali zdetronizować („zabić”) jeszcze wcześniejszą przeglądarkę, Mosaic.

Zastosowania

Najpierw jasne strony, zanim przejdę do ciemnych. Do czego przydają się informacje z user agenta?

Mogą na przykład ułatwić nam życie na stronkach z programami do pobrania. Stronka sama podsuwa nam instalator pasujący do naszego systemu operacyjnego.
Przykładem jest oficjalna strona języka Python, którą już linkowałem przy różnych okazjach.

User agent może być również stosowany jako dodatkowe zabezpieczenie.

Jeśli ktoś zdobędzie hasło do jakiegoś naszego konta, to jest spora szansa, że wtargnie na nie z własnego komputera i przeglądarki, innych niż nasze.
Strona może porównać to logowanie z naszymi poprzednimi i uznać je za podejrzane (np. zawsze używamy Linuksa + Firefoxa, a tu nagle zestaw Windows + Edge!).

To zabezpieczenie lekko trąci Wielkim Bratem, ale nie jestem jakimś jego przeciwnikiem.

Skoro strony i tak zbierają te informacje (bo, przypominam, wysyłamy je w nagłówkach HTTP przy każdym kontakcie), to przynajmniej niech raz w życiu użyją ich w naszym interesie.

Poza tym komunikaty o podejrzanych logowaniach są jawne. Użytkownicy mogą dzięki temu zobaczyć przebłyski tego, co wiedzą o nich duże firmy. Może się zaskoczą i kiedyś ich to zmotywuje do ochrony prywatności?

Przykład zabezpieczenia

Jeśli chcecie zobaczyć przykład (i macie Facebooka), to możecie wejść na facebook.com i potem w zakładkę Ustawienia > Bezpieczeństwo.

Możecie też przejść tam bezpośrednio, wklejając do paska link:

https://www.facebook.com/settings?tab=security

Pod nagłówkiem „Miejsce logowania” znajdziemy listę urządzeń i miejsc, z których się logowaliśmy.

Przybliżone lokalizacje (na poziomie miasta; czasem niedokładne) są związane z adresem IP. Będzie o nim w przyszłym wpisie, na razie to pomińmy.

Pozostałe dwie informacje, czyli system i przeglądarka, zostały odczytane właśnie z user agenta. Facebook zbiera je i daje znać, jeśli przy którymś logowaniu pojawi się coś nowego.

Ale akurat FB nie jest kryształowy w kwestii user agenta. Używa go również do sztucznego ograniczania ruchu, co pokażę poniżej.

Ciemna strona User Agenta

Możliwość rozpoznawania urządzeń i systemów rodzi czasem negatywne pokusy.

Można łatwo umieścić na serwerze regułkę „dyskryminującą” – wysyłającą różne strony w zależności od tego, jakie urządzenie o nie poprosiło.

Świat jest pełen dziwów.
Dlatego gdzieś pewnie istnieje strona wyświetlająca „Tylko dla Chromiarzy” wszystkim przeglądarkom niebędącym Chrome’em.
Albo „Strefa Apple, biedacy niemili widziani” osobom spoza jabłkowego ekosystemu.

Ale to powyższe tak z przymrużeniem oka. Spójrzmy na całkiem realne przykłady, kiedy user agenta używało się do sztucznego dzielenia użytkowników na grupy.

Microsoft

Ten przykład jest stary, ale dobrze pokazuje samo zjawisko. Mógłby wydarzyć się i dziś.

Kiedyś Microsoft był synonimem pazernego korpo i grał bardzo ostro. Przykład jego wybryku znajdziemy nawet w informacyjnym artykule o user agencie z Wikipedii:

Aby uzyskać dostęp do pełnej wersji gry [Cut the Rope], należało użyć przeglądarki Internet Explorer 9, a dla użytkowników starszych systemów (…) również zakupić nowszy system operacyjny.
(…)
każda z [konkurencyjnych przeglądarek] była bardziej kompatybilna od IE9.
(…)
Sprawdzanie przeglądarki polegało na UAString (…). Po zmianie UAString użytkownicy mogli skorzystać z gry bez używania przeglądarki Internet Explorer.

Źródło: Wikipedia (skróty i wtrącenia moje).

Gdyby Internet Explorer walczył na gruncie technicznym, to by zajął ostatnie miejsce.
Dlatego patrzyli na user agenta i faworyzowali swoją przeglądarkę. Stworzyli sztuczną barierę, żeby ośmieszyć konkurencję.

Google

Przykład nieco bardziej współczesny?

Microsoft został zdetronizowany przez Google’a.
I to nie tylko pod względem dominacji na rynku głównego nurtu. Jak się okazało, kolorowe G podpatrzyło też sztuczki dawnego monopolisty.

Znalazłem na YT fajny filmik pokazujący, jak Google stopniowo budował dominację Chrome’a wśród przeglądarek. Wykorzystał do tego inne swoje produkty, takie jak Dysk, Arkusze i podobne usługi.

Autor filmiku wskazuje, że usługi Google’a nieraz bardzo słabo działały na innych przeglądarkach niż Chrome. W tym na Edge’u oferowanym przez Microsoft. Mimo że Edge już wtedy korzystał z tego samego silnika co Chrome.

Jeśli w Edge’u zmieniło się user agenta i ponownie odwiedziło strony, to problem w magiczny sposób znikał. Wniosek? To nigdy nie był realny problem, tylko sztuczne ograniczenie. Ośmieszanie rywali.

Facebook

Facebook to kolos, ale nie ma własnej przeglądarki. Nie ma więc powodu, żeby faworyzować którąkolwiek z nich.
Tym niemniej też używa user agenta wbrew naszym interesom. Przeganiając użytkowników telefonów komórkowych ze stronki na aplikację.

Nie każdy wie, że Messenger ma również osobną stronkę, messenger.com. Jeśli klikniecie w ten link i korzystacie z komputera, to wyświetli Wam się duża wersja Messengera.

A co, jeśli chcemy odwiedzić tę stronę przez urządzenie mobilne?

Wtedy naszym oczom ukazują się zupełnie różne rzeczy, niż gdybyśmy wchodzili przez komputer:

Porównanie głównego ekranu strony messenger.com na komputerze i na telefonie. Widać, że wersja komputerowa ma pola na login i hasło, a wersja mobilna jedynie przycisk odsyłający do sklepu Google Play.

Takie ekrany się nam pokazują, jeśli nie jesteśmy zalogowani i wejdziemy na stronę Messengera.
Po lewej wersja na komputerze, po prawej mobilna.

Bolą mnie te wiszące spójniki.

Ale jeszcze bardziej boli to, że w wersji mobilnej (po prawej stronie) w ogóle nie ma opcji zalogowania się. Jest tylko link do Play Store’a. Nie otworzymy Messengera przez przeglądarkę, trzeba pobrać aplikację.

Dlaczego Facebook nas do tego zmusza? Oficjalna wersja pewnie byłaby taka, że aplikacja „jest zoptymalizowana” pod urządzenia mobilne.
Ale to średnia wymówka. Współczesne strony internetowe potrafią bardzo wiele, a FB ma armię programistów. Gdyby chciał stworzyć Messengera w formie strony mobilnej, to by to zrobił.

Możliwe, że chodzi o coś innego.
Gdy używamy przeglądarki, strony internetowe są ściśle ograniczone i raczej mało mogą nam zrobić (pomijając różne myki opisane w „Internetowej inwigilacji” :wink:).

A aplikacje? Te są dużo bardziej zżyte z systemem. Jeśli im pozwolimy, to mogą czytać nasze kontakty, zerkać na GPS-a, przeszukiwać pliki…
Jeśli kogoś ciekawią ich możliwości, to poświęciłem temu tematowi osobną serię wpisów, „Apki to pułapki”.

Niedawno Apple wprowadziło na systemie iOS (czyli Jabłkofonach) dość przejrzyste informacje o tym, czego chcą aplikacje.
Porównajmy uprawnienia domyślnej przeglądarki Safari z uprawnieniami Messengera na tym samym systemie:

Dwa zrzuty ekranu ułożone jeden nad drugim. Pierwszy pokazuje uprawnienia, o które prosi Safari. Są jedynie trzy. Drugi zrzut jest dużo większy i wskazuje kilkadziesiąt uprawnień, o które prosi Messenger.

Widać różnicę?

Wniosek: Kiedy używamy urządzeń mobilnych, Facebook świadomie i aktywnie zagania nas do aplikacji. Aplikacja prosi o wiele pozwoleń i może zbierać więcej danych niż strona.
Czy jest w tym jakiś związek? Oceńcie sami.

Reddit

Reddit to bardzo popularne forum dyskusyjne, dające użytkownikom możliwość zakładania własnych podgrup i dużą swobodę w wyborze ich wyglądu.

Podobnie jak Facebook ze swoim Messengerem, mocno starają się zagonić użytkowników do swojej mobilnej aplikacji.

Często widuję opinie, że korzystanie z ich strony na urządzeniach mobilnych celowo jest nieprzyjemne. Powolne, nieintuicyjne… A jednocześnie cały czas towarzyszy nam baner zachęcający do przejścia na aplikację mobilną.

Komunikat z Reddita zachęcający do korzystania z niego przez aplikację mobilną.

Jak zmienić user agenta?

Przykłady pokazują, że wszystko co powie nasz agent może zostać użyte przeciw nam.

W związku z tym może nam zależeć na jego podrobieniu. Szczególnie w dwóch przypadkach:

  1. Strona nas blokuje ze względu na naszą przeglądarkę
    (na przykład nie wyświetla się na urządzeniu mobilym);
  2. Nie chcemy zdradzać o sobie informacji.

Zanim cokolwiek zrobimy, krótkie ostrzeżenie – zbyt brawurowa zmiana user agenta może nawet osłabić naszą prywatność.

Przez „zbyt brawurową” rozumiem tutaj dwie rzeczy:

  • wymyślenie całkiem fikcyjnego ciągu znaków
    (np. ustawienie xyz jako naszego UA; wtedy wręcz wyróżniamy się z tłumu);
  • przedstawienie się jako przeglądarka z zupełnie innej rodziny
    (jeśli np. używamy Firefoksa, ale wysyłamy takiego UA jak Chrome).

Dlaczego to drugie może szkodzić?
Dlatego, że strony czasem zawierają kod rozpoznający przeglądarkę na podstawie jej właściwości. Więcej o tym we wpisie na temat kodu JavaScript.

Wyobraźmy sobie, że przedstawiamy się jako Chrome. A kod na stronie wykonuje testy i wychodzi mu, że jesteśmy Firefoksem.
W ten sposób poznali naszą prawdziwą przeglądarkę. Do tego widzą, że próbowaliśmy ich nabrać, maskując user agenta. Co może być bardziej wrażliwą informacją niż on sam.

Najprostsze rozwiązanie

Skoro już mamy świadomość zagrożeń, to przejdźmy do rzeczy.

Najprościej po prostu zainstalować kilka różnych przeglądarek i używać ich odpowiednio do naszych potrzeb.

W tych sprawach ilu ludzi, tyle opinii, dlatego niczego nie narzucam.
Ale zachęcam, żeby mieć przynajmniej jedną przeglądarkę prywatną i jedną mainstreamową. Na każdej zainstalowany dodatek uBlock Origin.

Za pierwszą z nich, tą od prywatności, można przyjąć np. Firefoksa.
Za drugą, mainstreamową, coś domyślnego z naszego systemu (np. Edge na Windowsie, Safari na MacOS).

Pamiętajmy tylko, żeby żadną z tych przeglądarek nie był Chrome, który lubi paplać o nas Google’owi.

Zamiast niego lepiej zainstalować Chromium.
To goły fundament Chrome’a. Ma identyczne działanie, tych samych twórców, wysyła takiego samego UA… Ale nie ma wbudowanych „integracji” śledzących od Google.

A jeśli nie boimy się bardziej niszowych rzeczy – jest Ungoogled Chromium. To wersja, która z założenia ma być niezależna od usług Google’a. A poza tym ma większość tych samych funkcji co Chrome.

Na urządzeniu mobilnym

Tutaj nie ma zastosowania porada „po prostu miej wiele przeglądarek”.
Przeglądarki desktopowej (na większy komputer) zwyczajnie nie zainstalujemy na urządzeniu mobilnym. Architektury systemów się różnią.

Na szczęście rozwiązanie może być proste – niektóre przeglądarki same umożliwiają udawanie komputera.

Na Androidzie taką funkcję ma na przykład Firefox (w wersji Focus i zwykłej).
W każdej z nich można kliknąć ikonę ustawień w prawym górnym rogu i zaznaczyć tam opcję „Wersja na komputery”:

Opcje przeglądarki Firefox Focus. Na żółto zakreślona jedna z nich, korzystania z wersji na komputery.

Za kulisami nasza przeglądarka będzie wysyłała lekko zmienionego user agenta. A nam powinny się wyświetlać strony takie jak na komputery.

Czyli, w przypadku Messengera, zobaczymy ekran logowania zamiast przycisku odsyłającego do apki. Możemy przeglądać wiadomości, nie oddając się w całości Fejsowi :metal:

Wada: w tej wersji strony mogą być nieco cięższe, wolniejsze i niedopasowane do rozmiaru ekranu. Wyświetlając je, liczmy się z koniecznością częstego przewijania i przybliżania obrazu.

Ogólne rozwiązanie

Czasem (pamiętając o ryzyku zdemaskowania) możemy mimo wszystko chcieć się podszyć pod całkiem inną przeglądarkę.

Przykładem jest sytuacja, gdy nie jesteśmy w stanie zainstalować wymaganej przeglądarki.

Może np. chcemy odwiedzić stronę wpuszczającą tylko ludzi z przeglądarką Safari. A to program od Apple. Działa na ich sprzęcie, ale na innych systemach operacyjnych łatwo jej nie odpalimy.

Inny przykład: chcemy używać konkretnej przeglądarki, bo lubimy jej funkcje. Ale strona jej nie wpuszcza.

Sam tego doświadczyłem w pracy. Nie wchodząc w szczegóły: potrzebowałem możliwości łatwego robienia długich screenów i otwierania ramek (iframe) w osobnych oknach.
Dałby mi to Firefox, ale strona przepuszczała tylko Chromium, dużo uboższe pod tym względem.

Jeśli znajdziemy się w takich sytuacjach i musimy zmienić UA, możemy użyć dodatku do przeglądarki.

Pomocne dodatki

Firefox:

Sprawdza się tutaj User Agent Switcher.

Chrome:

Również User Agent Switcher.

Inne przeglądarki na PC:

User Agent Switcher ma też wersję na Edge'a.

Po zmianie user agenta możecie sprawdzić, czy wszystko działa. Choćby przez odświeżenie tej strony i sprawdzenie, jakiego user agenta pokazuje teraz pole na początku wpisu.

Podsumowanie

Jeśli jakaś strona rozpoznaje nasz system i przeglądarkę, to już wiemy skąd.

User agent – w porównaniu z niektórymi innymi informacjami z nagłówków HTTP – nie wydaje się szczególnie groźny. Zwłaszcza jeśli idziemy z prądem i używamy po prostu jakiejś popularnej kombinacji systemu i przeglądarki. Zlewamy się wtedy z tłumem.

Warto jednak pamiętać, że UA to część naszego „odcisku palca” – w połączeniu z innymi informacjami pozwala nas identyfikować.

Jedną z tych informacji (a przy tym bardziej kłopotliwą, bo trudną do zmiany!) jest nasz adres IP. To on będzie tematem kolejnego wpisu.