668 145 480 info@jacekjagusiak.pl

WordPress to jeden z najczęściej wykorzystywanych systemów CMS na świecie, znany ze swojej elastyczności, wsparcia społeczności i ogromnej liczby wtyczek. Jednak jak każda rozbudowana platforma, czasami potrafi zaskoczyć użytkowników komunikatami błędów, które nie zawsze są oczywiste. Jednym z nich jest tajemniczy i frustrujący błąd „nonce_failure”, który może pojawić się niespodziewanie – najczęściej podczas przesyłania formularzy, wykonywania akcji w panelu admina lub korzystania z funkcji AJAX.

Ten błąd dotyczy mechanizmu bezpieczeństwa zwanego nonce (ang. number used once), który chroni przed atakami CSRF (Cross-Site Request Forgery). W tym poradniku pokażę Ci, skąd bierze się ten błąd, jak skutecznie go rozwiązać oraz jak zapobiegać mu w przyszłości. Dodatkowo dowiesz się, jak działają nonce’y „od kuchni” i poznasz kilka ciekawostek z ich użyciem.

Czym właściwie jest „nonce” i dlaczego jest tak ważny?

W WordPressie „nonce” to tymczasowy, unikalny token bezpieczeństwa, który służy do weryfikacji, czy dana akcja pochodzi od uprawnionego użytkownika. Wbrew nazwie, nie jest to „prawdziwy” kryptograficzny nonce (jak w kryptografii), ale spełnia podobną funkcję – zapobiega podszywaniu się pod użytkownika przez złośliwe skrypty z zewnętrznych źródeł.

Przykład? Gdy edytujesz post w WordPressie, formularz zawiera ukryte pole z nonce’m. Gdy klikniesz „Zapisz”, system sprawdza, czy przesłana wartość zgadza się z oczekiwaną. Jeśli nie – WordPress wyrzuca błąd „nonce_failure”.

Najczęstsze przyczyny błędu „nonce_failure”

1. Wygasły nonce

Domyślnie nonce w WordPressie są ważne przez 24 godziny. Jeśli formularz zostanie otwarty i wysłany po tym czasie, system nie rozpozna tokenu jako ważnego.

2. Problem z cache przeglądarki lub serwera

Niektóre wtyczki cache’ujące (lub cache po stronie serwera) mogą przechowywać przestarzałe wersje stron z nieaktualnymi nonce’ami.

3. Kopiowanie adresów URL z nonce

Jeśli skopiujesz adres URL zawierający nonce i użyjesz go później (np. wysyłając znajomemu lub otwierając po czasie), istnieje duża szansa, że nonce będzie już nieważny.

Sprawdź także:  Gdzie zniknęło justowanie w WordPress?

4. Praca na wielu kartach jednocześnie

Gdy użytkownik pracuje w kilku zakładkach WordPressa naraz, każda z nich może generować inny nonce – co prowadzi do konfliktu przy zapisie.

5. Nieprawidłowa synchronizacja czasu na serwerze

Weryfikacja nonce bazuje m.in. na czasie. Jeśli zegar serwera jest źle ustawiony, WordPress może uznać ważny nonce za nieważny.

6. Błędy w motywie lub wtyczkach

Źle napisany motyw lub wtyczka, która nieprawidłowo generuje lub weryfikuje nonce, może powodować ten błąd.

Jak naprawić błąd „nonce_failure” – pełna instrukcja?

1. Zidentyfikuj źródło problemu

Zacznij od obserwacji, przy jakiej czynności pojawia się błąd: edycja wpisu, zapis formularza, kliknięcie przycisku AJAX? Sprawdź logi błędów serwera oraz włącz tryb debugowania (patrz punkt 10).

2. Wyczyść pamięć podręczną przeglądarki

W Chrome:
  • Ustawienia → Prywatność i bezpieczeństwo → Wyczyść dane przeglądania
  • Zaznacz: „Obrazy i pliki zapisane w pamięci podręcznej” oraz „Pliki cookie”
  • Kliknij: Wyczyść dane
W Firefox:
  • Opcje → Prywatność i bezpieczeństwo → Pliki cookie i dane stron → Wyczyść dane
  • Zaznacz: „Zawartość pamięci podręcznej” i „Dane stron”
  • Zatwierdź

3. Wyczyść cache WordPressa

W W3 Total Cache:
  • Przejdź do Performance → Dashboard
  • Kliknij Empty All Caches
W WP Super Cache:
  • Ustawienia → WP Super Cache
  • Kliknij Usuń wszystkie pliki z pamięci podręcznej

4. Odśwież Permalinki

Czasem wystarczy przejść do Ustawienia → Bezpośrednie odnośniki i kliknąć Zapisz zmiany, nawet bez ich zmieniania. To resetuje reguły przepisywania adresów, które również mogą wpływać na działanie nonce’ów.

5. Tymczasowo wyłącz wszystkie wtyczki

  • Przejdź do Wtyczki → Zainstalowane
  • Zaznacz wszystkie → Dezaktywuj
  • Sprawdź, czy problem ustąpił. Jeśli tak – włączaj wtyczki po jednej, aż znajdziesz winowajcę.

6. Zwiększ limit pamięci PHP

W pliku wp-config.php dodaj linię:

define('WP_MEMORY_LIMIT', '256M');

To pozwala WordPressowi na sprawniejsze działanie, szczególnie podczas przetwarzania nonce’ów w bardziej złożonych operacjach.

Sprawdź także:  Dlaczego mój WordPress nie wysyła maili?

7. Wymuś regenerację nonce

Dodaj poniższą funkcję do functions.php w motywie:

function regenerate_nonces() {
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        wp_set_auth_cookie($user->ID);
    }
}
add_action('init', 'regenerate_nonces');

To wymusi utworzenie nowego nonce po zalogowaniu się użytkownika.

8. Przetestuj działanie motywu

Zmień tymczasowo motyw na np. Twenty Twenty-One. Jeśli błąd znika, oznacza to, że problem tkwi w Twoim motywie. Warto wtedy zgłosić się do autora lub dokładnie przeanalizować kod.

9. Zsynchronizuj czas serwera

Jeśli masz dostęp do SSH, możesz wymusić synchronizację z serwerem czasu:

sudo apt-get install ntp
sudo service ntp start

Jeśli nie masz dostępu do terminala, poproś hosting o sprawdzenie synchronizacji czasu.

10. Włącz debugowanie

W wp-config.php dodaj linie:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Plik logów pojawi się w: wp-content/debug.log. Wyszukaj frazy związane z „nonce”, aby zidentyfikować źródło błędu.

  • Nonce nie są tak naprawdę „jednorazowe” – są ważne przez określony czas i mogą być użyte wielokrotnie w tym okresie.
  • Istnieją specjalne funkcje do generowania i weryfikowania nonce: wp_create_nonce(), wp_nonce_field(), check_admin_referer(), check_ajax_referer().
  • Nonce mogą być osadzone w adresach URL, formularzach HTML lub przekazywane przez AJAX.

Choć błąd „nonce_failure” może na pierwszy rzut oka wydawać się tajemniczy i frustrujący, w rzeczywistości jego przyczyna zwykle leży w prostych mechanizmach bezpieczeństwa. WordPress używa nonce’ów, aby zapewnić użytkownikom ochronę przed złośliwymi atakami, ale czasami ten sam mechanizm może sprawiać trudności administratorom i deweloperom.

Rozwiązanie problemu często wymaga kilku prostych kroków: wyczyszczenia cache, odświeżenia permalinks, dezaktywacji problematycznych wtyczek, a w ostateczności – analizy debug.log. Warto również zadbać o prawidłowe synchronizowanie czasu serwera oraz pisanie poprawnych motywów i wtyczek zgodnych z dokumentacją WordPressa.

Jeśli jednak mimo wszystko błąd nadal występuje – nie panikuj. Skorzystaj ze wsparcia społeczności WordPressa, forów lub skontaktuj się z profesjonalnym deweloperem. Świadome zarządzanie bezpieczeństwem strony to podstawa, a znajomość działania nonce’ów to jedno z ważnych narzędzi w arsenale każdego administratora WordPressa.

Spis treści