Błąd ERRUNSAFEREDIRECT to problem bezpieczeństwa w przeglądarkach opartych na Chromium, który blokuje przekierowania uznane za potencjalnie niebezpieczne. Przeglądarka wykrywa podejrzane próby przekierowania użytkownika i przerywa połączenie, aby chronić przed atakami typu phishing, złośliwym oprogramowaniem lub nieautoryzowanym dostępem do danych.
Główne przyczyny błędu
Błąd ERRUNSAFEREDIRECT występuje najczęściej w następujących scenariuszach:
Przekierowania do rozszerzeń przeglądarki – Chrome od wersji 66 zaostrzyło politykę bezpieczeństwa i blokuje przekierowania z zewnętrznych stron do wewnętrznych adresów rozszerzeń (chrome-extension://). Dotyczy to sytuacji, gdy aplikacja webowa próbuje przekierować użytkownika do rozszerzenia przeglądarki.
Problemy z limitami GitHub – W przypadku aplikacji Electron integrujących się z GitHub API, błąd może wystąpić przy przekroczeniu limitów API. System GitHub wykrywa nadmierną aktywność i blokuje dalsze próby połączenia.
Niezabezpieczone przekierowania HTTP/HTTPS – Przekierowanie z bezpiecznego protokołu HTTPS na niezabezpieczony HTTP lub odwrotnie może zostać zablokowane jako potencjalne zagrożenie bezpieczeństwa.
Nieprawidłowa konfiguracja CORS – Gdy serwer nie ma prawidłowo skonfigurowanych nagłówków Cross-Origin Resource Sharing, przeglądarka może zablokować przekierowanie między domenami.
Problemy z authentication flow – Błąd pojawia się często w procesach OAuth lub SSO, gdy aplikacja próbuje przekierować użytkownika przez wiele domen w celu uwierzytelnienia.
Rozwiązania dla webmasterów i deweloperów
Krok 1 – Analiza źródła problemu
Otwórz Narzędzia deweloperskie w przeglądarce (F12 lub Ctrl+Shift+I) i przejdź do zakładki Console oraz Network. Sprawdź dokładny komunikat błędu i ścieżkę przekierowania – zapisz adresy URL źródłowy i docelowy, kody odpowiedzi HTTP oraz nagłówki żądań.
Krok 2 – Weryfikacja łańcucha przekierowań
Przeanalizuj wszystkie przekierowania w procesie:
- Zlicz liczbę przekierowań (zalecane maksimum to 3-5)
- Sprawdź, czy występują przekierowania między różnymi protokołami (HTTP ↔ HTTPS)
- Zidentyfikuj przekierowania między różnymi domenami
Krok 3 – Implementacja bezpiecznych przekierowań
Używaj względnych URL zamiast bezwzględnych, gdy to możliwe. Zamiast window.location.href = "https://example.com/page" użyj window.location.href = "/page" dla przekierowań w obrębie tej samej domeny.
Implementuj przekierowania po stronie serwera poprzez odpowiednie konfiguracje w .htaccess, nginx.conf lub kodzie backendowym (PHP, Node.js, Python). Przekierowania po stronie serwera są bardziej niezawodne i bezpieczne.
Konfiguracja w .htaccess (Apache) –
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Konfiguracja w nginx.conf –
server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; }
Krok 4 – Naprawa przekierowań do rozszerzeń przeglądarki
Jeśli twoja aplikacja musi komunikować się z rozszerzeniem Chrome, nigdy nie przekierowuj bezpośrednio do chrome-extension://. Zamiast tego:
Użyj postMessage API do komunikacji między stroną a rozszerzeniem:
// W kodzie strony window.postMessage({ type: 'TO_EXTENSION', data: yourData }, '*'); // W rozszerzeniu (content script) window.addEventListener('message', function(event) { if (event.data.type === 'TO_EXTENSION') { // Przetwórz dane } });
Implementuj chrome.runtime.sendMessage dla komunikacji między komponentami rozszerzenia bez przekierowań URL.
Krok 5 – Konfiguracja nagłówków CORS
Skonfiguruj odpowiednie nagłówki na serwerze:
PHP –
header("Access-Control-Allow-Origin: https://twoja-domena.com"); header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); header("Access-Control-Allow-Headers: Content-Type, Authorization"); header("Access-Control-Allow-Credentials: true");
Node.js (Express) –
const cors = require('cors'); app.use(cors({ origin: 'https://twoja-domena.com', credentials: true, methods: ['GET', 'POST', 'OPTIONS'] }));
Krok 6 – Obsługa limitów API
W przypadku problemów z limitami GitHub API:
- Implementuj rate limiting w swoim kodzie
- Dodaj opóźnienia między kolejnymi żądaniami
- Używaj tokenu autoryzacyjnego zamiast nieautoryzowanych żądań
- Implementuj caching odpowiedzi API
// Przykład prostego rate limitera const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); async function fetchWithRateLimit(url) { await delay(1000); // Opóźnienie 1 sekundy return fetch(url); }
Krok 7 – Zabezpieczenie OAuth flow
Dla procesów uwierzytelniania OAuth:
Używaj state parameter do ochrony przed CSRF:
const state = generateRandomString(); sessionStorage.setItem('oauth_state', state); const authUrl = `https://provider.com/oauth?state=${state}&redirect_uri=${encodeURIComponent(redirectUri)}`;
Waliduj redirect_uri na serwerze autoryzacji – dodaj wszystkie dozwolone URL do whitelist w konfiguracji OAuth provider.
Implementuj PKCE (Proof Key for Code Exchange) dla dodatkowej warstwy bezpieczeństwa w aplikacjach Single Page Application.
Krok 8 – Testowanie i debugowanie
Przetestuj przepływ przekierowań w różnych przeglądarkach (Chrome, Edge, Opera) oraz w trybie incognito. Użyj narzędzi takich jak Postman lub cURL do testowania przekierowań po stronie serwera. Zweryfikuj nagłówki odpowiedzi HTTP – szczególnie Location, Access-Control-Allow-Origin i Content-Security-Policy.
Rozwiązania dla użytkowników końcowych
Metoda 1 – Wyczyść dane przeglądarki
Przejdź do Ustawienia → Prywatność i bezpieczeństwo → Wyczyść dane przeglądania. Zaznacz opcje: Pliki cookie i inne dane witryn, Obrazy i pliki w pamięci podręcznej. Wybierz zakres czasu Cały czas i kliknij Wyczyść dane.
Metoda 2 – Wyłącz problematyczne rozszerzenia
Wpisz w pasku adresu chrome://extensions/ i przejdź do listy rozszerzeń. Wyłącz wszystkie rozszerzenia i sprawdź, czy problem zniknął. Włączaj rozszerzenia pojedynczo, aby zidentyfikować winowajcę.
Metoda 3 – Zaktualizuj przeglądarkę
Przejdź do Ustawienia → O przeglądarce Chrome i poczekaj na automatyczne sprawdzenie i instalację aktualizacji. Uruchom przeglądarkę ponownie po zakończeniu aktualizacji.
Metoda 4 – Sprawdź ustawienia zabezpieczeń
W Ustawienia → Prywatność i bezpieczeństwo → Bezpieczeństwo upewnij się, że poziom ochrony nie jest ustawiony na „Rozszerzona”. Standardowa ochrona powinna wystarczyć dla większości użytkowników.
Metoda 5 – Zresetuj ustawienia przeglądarki
W Ustawieniach przejdź do sekcji Zresetuj i wyczyść → Przywróć domyślne ustawienia. Potwierdź operację – ta czynność nie usunie zakładek ani haseł, ale zresetuje stronę startową, wyszukiwarkę i wyłączy rozszerzenia.
Metoda 6 – Wypróbuj tryb incognito
Otwórz nowe okno incognito (Ctrl+Shift+N) i spróbuj ponownie uzyskać dostęp do strony. Jeśli działa w trybie incognito, problem leży w rozszerzeniach lub danych przeglądarki.
Zapobieganie problemom w przyszłości
Dla deweloperów – Implementuj monitoring przekierowań na produkcji przy użyciu narzędzi takich jak Google Analytics lub Sentry. Dokumentuj wszystkie ścieżki przekierowań w aplikacji. Regularnie przeglądaj i aktualizuj konfiguracje zabezpieczeń. Stosuj zasadę najmniejszych uprawnień w konfiguracjach CORS. Testuj zmiany w przekierowaniach na środowisku testowym przed wdrożeniem.
Dla użytkowników – Utrzymuj przeglądarkę zaktualizowaną do najnowszej wersji. Instaluj tylko zaufane rozszerzenia ze sprawdzonych źródeł. Regularnie czyść dane przeglądarki, co najmniej raz w miesiącu. Unikaj klikania w podejrzane linki z nieznanych źródeł.
Dodatkowe informacje techniczne
Błąd ERRUNSAFEREDIRECT jest mechanizmem obronnym przeglądarki i jego wystąpienie zazwyczaj wskazuje na rzeczywisty problem bezpieczeństwa lub konfiguracji. Przeglądarka analizuje każde przekierowanie pod kątem potencjalnych zagrożeń, weryfikując między innymi zgodność protokołów, pochodzenie domeny oraz integralność łańcucha przekierowań.
Content Security Policy (CSP) może również wpływać na przekierowania. Upewnij się, że nagłówek CSP zawiera odpowiednie dyrektywy:
Content-Security-Policy: default-src 'self'; navigate-to 'self' https:;
W przypadku aplikacji Electron należy zwrócić szczególną uwagę na konfigurację webSecurity i allowRunningInsecureContent w BrowserWindow, które mogą wpływać na sposób obsługi przekierowań.
Pamiętaj, że bezpieczeństwo użytkowników jest priorytetem – jeśli przeglądarka blokuje przekierowanie, najprawdopodobniej ma ku temu uzasadniony powód. Zamiast próbować obejść zabezpieczenia, należy przeprojektować mechanizm przekierowań zgodnie z aktualnymi standardami bezpieczeństwa web.

