Paste Shield: czyści dane osobowe z tekstu przed wklejeniem do ChatGPT
Usuwa nazwiska, adresy, numery kont, klucze i hasła z tekstu, zanim wkleisz go do ChatGPT, a całą pracę wykonuje w Twojej przeglądarce.
Każda wklejka do ChatGPT to potencjalny wyciek
Wklejasz fragment maila, loga czy konfiguracji do modelu i łatwo zostawiasz w nim imiona, adresy, numery kont, klucze API i hasła. Narzędzia, które czyszczą tekst na serwerze, tylko przenoszą wyciek w inne miejsce. Zbudowaliśmy więc filtr, który usuwa te dane, zanim opuszczą kartę przeglądarki: bez instalacji, bez konta, bez wysyłania treści do zewnętrznego API.
Trzy warstwy detekcji, wszystkie na urządzeniu
- Model NER
- Dane bez stałego kształtu: imiona i nazwiska, adresy i miejscowości. Rozumie kontekst zdania. Liczy w Web Workerze (@huggingface/transformers) na procesorze, przez WebAssembly, więc ten sam wynik dostaniesz w Chrome, Edge, Firefoksie i Safari.
- Reguły z sumami kontrolnymi
- Dane o stałym kształcie: klucze API, tokeny, JWT, klucze prywatne, IBAN i NRB, karty, PESEL, NIP, REGON, e-maile, telefony, daty, hasła. Liczą natychmiast, jeszcze zanim model się załaduje, bo wyciek klucza jest katastrofalny.
- Twoja lista zawsze-ukryj
- Słowa, które tylko Ty znasz jako wrażliwe: nazwy klientów, kryptonimy projektów. Model nie może ich odgadnąć.
Trafienia z wszystkich trzech warstw scalają się w jedną listę, bez limitu pewności: pominięcie jest wyciekiem, więc nad-redakcja jest bezpieczną stroną błędu. Gdy reguła i model opisują ten sam fragment, wygrywa reguła: NIP potwierdzony sumą kontrolną zostaje NIP-em, a nie „kontem bankowym”. Model działa w trybie fail-closed: błąd ładowania blokuje kopiowanie, dopóki nie przeładujesz modelu.
Jedno pobranie, potem offline
Model pobiera się raz, z huggingface.co, i zostaje w pamięci przeglądarki. Licznik żądań w aplikacji pokazuje te megabajty na żywo, więc nie musisz wierzyć na słowo.
Model używa wyłącznie standardowych operatorów ONNX, więc liczy na procesorze przez WebAssembly: tak samo w Chrome, Edge, Firefoksie i Safari, na komputerze i na telefonie. Nie ma osobnego trybu „tylko reguły” dla słabszych urządzeń. Gdy przeglądarka zgłasza łącze taryfowe, pobieranie czeka na Twoje dotknięcie. Gdy zabraknie miejsca na zapis modelu, aplikacja mówi wprost, że pobierze go ponownie następnym razem.
Zero zapytań, nie deklaracja, tylko architektura
Tekst nigdy nie opuszcza Twojej przeglądarki.
- 0
- zapytań sieciowych z Twoim tekstem: treść nigdy nie opuszcza Twojej przeglądarki, więc na serwerze nie ma czego wykraść.
- 135 MB
- model pobiera się raz i zostaje w przeglądarce: 6,5 s na szybkim łączu, około minuty na 20 Mbit. Potem działa offline.
- fail-closed
- błąd ładowania modelu blokuje kopiowanie: nawet awaria nie wypuści tekstu bez ochrony.
Metoda: „0 zapytań” dotyczy Twojego tekstu, nie całej strony. Jedyne wyjście na zewnątrz to pobranie modelu, pokazane w aplikacji osobnym wierszem licznika: plik model_quantized.onnx waży 135 359 829 bajtów, do tego 2,9 MB słownika, a czas liczymy od pierwszego wyrenderowania strony do gotowości modelu. Nagłówki izolacji cross-origin (COOP/COEP/CORP) są ustawione w next.config.ts i vercel.json. Aplikacja nie wysyła żadnej telemetrii ani analityki. Kod: 2473 linie TypeScriptu w src (bez pustych i komentarzy) i 206 testów jednostkowych.
Projekt własny. Zbudowaliśmy go i utrzymujemy sami.
Każdy wybór ma powód
| Warstwa | Wybór | Co to daje |
|---|---|---|
| Framework | Next.js (App Router) | Strona liczy wszystko u Ciebie, więc nie ma żądania, które mogłoby wynieść tekst. |
| Model | distilbert-base-multilingual-cased-ner-hrl, q8 | Rozpoznaje nazwiska i adresy w każdej przeglądarce, bez karty graficznej. |
| Runtime | @huggingface/transformers, ONNX Runtime | Model liczy się w tle, więc pisanie w oknie nie zacina się w trakcie. |
| Detekcja strukturalna | Reguły w głównym wątku, model w workerze | Numer potwierdzony sumą kontrolną zostaje opisany tym, czym jest, a nie zgadnięty. |
| Offline | Service worker + CacheStorage | Po pierwszym pobraniu aplikacja otwiera się bez internetu. |
