Bezpieczne przekierowanie jest procesem, nie jednym nagłówkiem Location
Mechanizm może mieć kilka linijek kodu, lecz jego skutki żyją w wiadomościach, dokumentach, kodach QR i pamięci podręcznej. Projekt zacznij od modelu zagrożeń i odpowiedzialności. Inaczej ocenia się zamknięty zestaw odsyłaczy redakcyjnych, a inaczej publiczną usługę przyjmującą dowolne cele.
Ustal role i dozwolony przypadek użycia
Nazwij właściciela domeny, administratora rekordów, autorów, odbiorców i osobę reagującą na zgłoszenia. Określ, kto może tworzyć, zmieniać, wyłączać i odtwarzać linki oraz jak zatwierdza się cel o wysokim ryzyku. Dostęp do panelu chroni się jak możliwość publikacji pod zaufaną domeną.
Najpierw ogranicz zakres
Jeżeli odsyłacze służą wyłącznie własnej witrynie, nie przyjmuj zewnętrznych hostów. Jeśli dopuszczasz partnerów, utrzymuj jednoznaczną allowlistę po poprawnym parsowaniu adresu. Publiczne skracanie dla nieznanych użytkowników wymaga osobnej architektury ochrony, moderacji i reagowania; prosty formularz nie jest gotową polityką nadużyć.
Mapuj identyfikator na cel po stronie serwera
OWASP zaleca, aby tam, gdzie to możliwe, klient przekazywał krótki identyfikator lub token odpowiadający zapisanej wartości. Nie buduj otwartego endpointu, który bierze pełny URL z parametru i natychmiast ustawia go w Location. Taka konstrukcja może użyczyć wiarygodnej domeny do kierowania na dowolną stronę.
Walidacja powinna korzystać ze standardowego parsera URL, sprawdzać dozwolony schemat, znormalizowany host, port i reguły biznesowe. Proste „zaczyna się od” lub wyszukiwanie fragmentu tekstu nie radzi sobie z wieloma poprawnymi, lecz mylącymi konstrukcjami. Zapisuj docelową wartość po walidacji i stosuj tę samą kontrolę przy każdej edycji.
Token nie może być jedyną kontrolą dostępu
Losowy identyfikator powinien mieć wystarczającą przestrzeń i nie ujawniać kolejności rekordów, ale nie zakładaj, że nieodgadniony URL pozostanie tajny. Może trafić do historii, komunikatora, logu, zrzutu ekranu lub nagłówków. Zasób prywatny nadal wymaga właściwego uwierzytelnienia i autoryzacji w serwisie docelowym.
Ogranicz tempo tworzenia i odpytywania, monitoruj wzorce enumeracji oraz oddziel publiczny identyfikator od klucza administracyjnego. Błąd powinien ujawniać możliwie mało o istnieniu prywatnego celu, ale pozostawać zrozumiały dla zwykłego odbiorcy.
Dobierz kod do trwałości i metody
RFC 9110 i RFC 9205 rozróżniają przekierowania trwałe oraz tymczasowe, a także te, które zachowują metodę żądania. Dla typowego krótkiego linku otwieranego metodą GET często potrzebna jest możliwość późniejszej zmiany celu, dlatego decyzja o trwałym kodzie wymaga ostrożności. Odpowiedzi 301 i 308 mogą być ponownie używane przez pamięć podręczną zgodnie z regułami HTTP.
Nie przenoś automatycznie żądań POST, danych logowania ani operacji zmieniających stan przez ogólny skrót. Kody 307 i 308 zachowują metodę przy automatycznym przekierowaniu; 301 i 302 mogą zmienić POST na GET. Jeśli aplikacja naprawdę potrzebuje innego przepływu, zaprojektuj go świadomie i przetestuj klienty.
Pokaż cel, gdy kontekst tego wymaga
Dla zewnętrznych lub wrażliwych celów rozważ stronę pośrednią z czytelną nazwą hosta i przyciskiem świadomego przejścia. OWASP wskazuje taki ekran jako jedno z możliwych ograniczeń otwartego przekierowania. Nie zasłaniaj celu reklamą, automatycznym odliczaniem ani mylącą etykietą przycisku.
Podgląd nie może obiecywać bezpieczeństwa. Jeśli system pobiera tytuł lub obraz z podanego URL, staje się klientem sieciowym i potrzebuje ochrony przed SSRF, kontroli przekierowań, limitów czasu i rozmiaru oraz izolacji przetwarzania. Bezpieczniejszą opcją bywa pokazanie znormalizowanego adresu bez pobierania celu.
Zaplanuj rejestr, przegląd i wyłączenie
Każdy rekord powinien mieć właściciela, opis przeznaczenia, źródło publikacji, docelowy URL, datę utworzenia, datę przeglądu i stan. Oddziel zmianę treści od zmiany uprawnień. Dla materiału drukowanego zanotuj nakład i spodziewany czas obiegu, bo nie da się zdalnie poprawić kodu QR na papierze.
Gdy link przestaje pełnić swój cel, wybierz jawne wycofanie, kontrolowaną stronę archiwalną albo zgodnego następcę. Nie uwalniaj szybko identyfikatora do ponownego użycia. Stary link może nadal krążyć, a przypisanie go nowemu, niezwiązanemu celowi zmienia znaczenie wcześniejszych publikacji.
Zbieraj tylko dane potrzebne do działania i obrony
Zdefiniuj oddzielnie log bezpieczeństwa, pomiar kampanii i diagnostykę. Ustal cel, zakres, dostęp, czas retencji oraz procedurę usunięcia. Parametry URL mogą zawierać więcej informacji, niż zakładał autor; nie kopiuj ich bez potrzeby do każdego systemu analitycznego.
Dokumentacja prywatności powinna odpowiadać rzeczywistej konfiguracji, a nie ogólnemu opisowi narzędzia. Minimalizacja nie oznacza zerowych logów: oznacza świadomy dobór danych do konkretnego celu i usunięcie ich, gdy przestają być potrzebne.
Reakcja na nadużycie musi działać poza godziną publikacji
Zapewnij kanał zgłoszenia, możliwość szybkiego zatrzymania rekordu, historię zmian i przegląd wszystkich linków danego konta. Przy przejęciu celu lub panelu najpierw ogranicz dalsze przekierowania, zachowaj proporcjonalne dowody i zmień dane dostępowe. Następnie poinformuj odbiorców w kanałach, w których link został opublikowany.