Słownik

Czym jest Fragment URL?

Fragment URL to część adresu URL pojawiająca się po znaku krzyżyka (#). Zgodnie z RFC 3986 przeglądarki przetwarzają fragmenty wyłącznie po stronie klienta i nigdy nie dołączają ich do żądań HTTP wysyłanych do serwera.

Adresy URL mają zdefiniowaną strukturę: schemat, autorytet, ścieżkę, ciąg zapytania i fragment. Fragment (wszystko po znaku #) był pierwotnie zaprojektowany do nawigacji do określonej sekcji w ramach strony. Jednak jego najważniejszą właściwością z perspektywy bezpieczeństwa jest to, że specyfikacja HTTP wyraźnie nakazuje przeglądarkom nigdy nie wysyłać fragmentu do serwera.

Gdy odwiedzasz adres URL jak example.com/page#section, przeglądarka wysyła żądanie dla example.com/page — część #section jest usuwana przed wykonaniem żądania. Fragment pozostaje w pasku adresu przeglądarki i jest dostępny dla JavaScript działającego na stronie, ale serwer nie ma o nim żadnej wiedzy. Zachowanie to jest nakazane przez specyfikację HTTP i jest spójne we wszystkich nowoczesnych przeglądarkach.

Ta właściwość sprawia, że fragmenty URL są wyjątkowo przydatne do przekazywania wrażliwych danych w aplikacjach webowych. Klucze szyfrowania lub inne sekrety umieszczone we fragmencie są dostępne dla kodu JavaScript po stronie klienta potrzebującego ich do deszyfrowania, ale nigdy nie są przesyłane do serwera, rejestrowane przez proxy ani zapisywane w dziennikach dostępu serwera.

See the fragment vanish in transit

Edit the part after # and watch the server log update. The fragment never appears in the HTTP request line.

What your browser sees
https://www.vaulted.fyi/s/aBc123#b9pK4mNxQ_2L7eRfA3vTcU1xY8zB6jH9wM0nP5qS4iE
What the server's access log records
GET /s/aBc123 HTTP/1.1
Host: www.vaulted.fyi
User-Agent: Mozilla/5.0 ...

Per RFC 3986 §3.5, browsers strip everything after # before issuing the HTTP request. The fragment stays in the address bar, accessible only to JavaScript on the loaded page — never logged, never proxied, never cached by the server.

Jak Vaulted używa Fragment URL

Vaulted umieszcza klucz szyfrowania AES-256-GCM bezpośrednio we fragmencie URL. Gdy tworzysz sekret, wygenerowany link ma format /s/{id}#{base64url(key)}. Ponieważ przeglądarki nigdy nie wysyłają fragmentu w żądaniach HTTP, klucz szyfrowania nigdy nie dociera do serwera Vaulted. Przeglądarka odbiorcy wyodrębnia klucz z fragmentu, pobiera zaszyfrowane dane z serwera i wykonuje deszyfrowanie lokalnie. Ta jedna decyzja architektoniczna sprawia, że Vaulted jest prawdziwym systemem zero-knowledge.