← Powrót

Privacy Thing

Twórca / Projektant produktu / Programista · Open Source

Okres: 2025 – obecnie

Privacy Thing pozwala decydować, jakie informacje o środowisku przeglądarki zobaczy konkretna witryna. Zamiast jednego globalnego ustawienia użytkownik może przypisać różnym domenom osobne profile geolokalizacji, języka, strefy czasowej i wybranych obszarów ochrony.

Projekt rozpoczął się pod nazwą GeoWarp jako prosty spoofer geolokalizacji. Pierwsza wersja robiła jedną rzecz: zwracała stronom inne współrzędne. Szybko okazało się jednak, że sama lokalizacja to za mało. Witryna może jednocześnie sprawdzić język, strefę czasową, ustawienia regionalne, nagłówki i dane urządzenia. Kiedy informacje te do siebie nie pasują, niespójność staje się cechą równie charakterystyczną jak wartości, które miała ukryć.

Z tego eksperymentu wyrósł Privacy Thing — system pozwalający kontrolować nie pojedynczą wartość, lecz spójny obraz środowiska widziany przez witrynę.

Jedna konfiguracja dla konkretnej witryny

Podstawą produktu są profile i reguły domenowe. Profil opisuje wybrane parametry środowiska, a reguły określają, na których stronach ma obowiązywać. W Firefoxie konfiguracja może dodatkowo uwzględniać używany kontener. Dzięki temu ten sam użytkownik może korzystać z różnych ustawień zależnie od odwiedzanej witryny i kontekstu.

Do szybkiego zarządzania bieżącą domeną służy popup, a pełny panel ustawień pozwala organizować profile i reguły, importować lub eksportować konfigurację, przeglądać logi oraz porządkować dane witryn. Zaprojektowałem również X-Ray — panel pokazujący, po jakie obsługiwane dane i funkcje sięga aktywna strona oraz które ustawienia Privacy Thing mają na nie wpływ. Ochrona przestaje dzięki temu być niewidocznym mechanizmem, a staje się czymś, co użytkownik może samodzielnie sprawdzić.

Najtrudniejsze: zdążyć przed stroną

W tym projekcie wyzwaniem nie jest wyłącznie zmiana zachowania przeglądarkowych API. Równie ważne jest wykonanie jej, zanim strona zdąży odczytać prawdziwe wartości. Późniejsza korekta nie cofnie informacji ujawnionej podczas pierwszych chwil ładowania dokumentu.

Zbudowałem własny runtime oraz mechanizmy dostarczające mu właściwą konfigurację już podczas nawigacji. Muszą działać stabilnie po zmianach ustawień, przeładowaniach strony i ponownym uruchomieniu ochrony, bez nakładania na siebie kolejnych modyfikacji. To właśnie niezawodność i odpowiedni moment uruchomienia okazały się trudniejsze niż sama podmiana danych.

Wiele kontekstów i dwa środowiska

Współczesne aplikacje webowe uruchamiają kod nie tylko w głównym oknie, lecz także w ramkach i różnych rodzajach workerów. Każdy z tych kontekstów może widzieć inny fragment środowiska, dlatego aktywna konfiguracja Privacy Thing musi docierać również poza główny dokument — bez zakłócania mechanizmów, na których polegają same aplikacje.

Dodatkowym źródłem złożoności są różnice między Chromium i Firefoksem. Oba środowiska oferują podobny model rozszerzeń, ale inaczej uruchamiają kod strony i przekazują mu dane. Oddzieliłem więc wspólne zachowanie produktu od adapterów obsługujących ograniczenia poszczególnych przeglądarek. Pozwala to rozwijać jedną funkcję dla obu wersji i sprawdzać je w tych samych scenariuszach.

Jakość sprawdzana w prawdziwych przeglądarkach

Privacy Thing ingeruje w zachowanie natywnych API, dlatego testy jednostkowe nie wystarczają. Projekt łączy je z testami integracyjnymi i automatyzacją uruchamianą w rzeczywistych wersjach Chromium i Firefoksa. Sprawdzane są między innymi pierwsze odczyty podczas ładowania strony, ramki, workery, nagłówki oraz kompletne przepływy interfejsu.

Wraz z rozwojem projektu wydzieliłem współdzielone biblioteki odpowiedzialne za geolokalizację, czas, ochronę przed fingerprintingiem, integrację z przeglądarkami i diagnostykę. Repozytorium obejmuje również strony testowe oraz narzędzia pomagające wykrywać różnice między deklarowanymi i rzeczywistymi możliwościami przeglądarek.

Rozbudowane testy Chromium i Firefoksa są uruchamiane przy wsparciu webh.pl, które udostępnia projektowi infrastrukturę serwerową opartą na procesorach AMD EPYC. Zapewnia ona szybkie i powtarzalne środowisko do sprawdzania kolejnych zmian przed wydaniem.

Prywatność i granice produktu

Profile, reguły, ustawienia i logi pozostają w przeglądarce użytkownika. Privacy Thing nie posiada własnego backendu telemetrycznego i nie ładuje zdalnego kodu. Funkcje map oraz wyszukiwania lokalizacji korzystają z OpenStreetMap i Nominatim dopiero po świadomym uruchomieniu ich przez użytkownika.

Privacy Thing nie jest VPN-em ani proxy. Nie zmienia publicznego adresu IP i nie obiecuje anonimowości ani niewykrywalności. Jego zadaniem jest precyzyjna, możliwa do zweryfikowania kontrola tych informacji, na które rozszerzenie przeglądarkowe faktycznie może wpływać.

Projekt jest nadal rozwijany i przygotowywany do publicznego wydania. To, co zaczęło się od podmiany współrzędnych, stało się wieloprzeglądarkowym produktem łączącym kontrolę środowiska, widoczną diagnostykę i zaplecze pozwalające sprawdzać jego działanie w rzeczywistych warunkach.

Technologie i obszary

Języki

  • TypeScript

Frontend

  • React

Testy i automatyzacja

  • Playwright
  • Vitest

Web Platform

  • Geolocation API
  • DOM API
  • Web Workers API
  • Service Worker API
  • Web Storage API
  • Canvas API
  • WebGL API
  • HTML Audio API
  • WebRTC API

Rozszerzenia przeglądarkowe

  • Manifest V3
  • WebExtensions API
  • Browser Extension APIs
  • Main World Injection
  • Declarative Net Request API

Build tooling

  • Vite

Mapy i pozycjonowanie

  • OpenStreetMap
  • Nominatim