✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Wysyłanie bezpiecznych żądań Ajax w WordPress (z Nonces)

24

Wiem, że REST API jest obecnie ogromnym tematem rozmów w WordPressie i słusznie, ale wciąż zdarzają się sytuacje, w których musimy używać admin-ajax (jak to się zaczyna nazywać) z różnych powodów.

  • Być może jest to aplikacja,
  • Być może czas nie pozwala na stworzenie niezbędnych punktów końcowych,
  • Być może czujesz się bardziej komfortowo z admin-ajax,
  • I tak dalej.

Niezależnie od powodów, dla których go używasz (co nadal robię, bez względu na to, co działa), uważam, że ważne jest, aby upewnić się, że wysyłamy bezpieczne żądania Ajax w WordPress za pomocą nonces, tak jak byś przesyłał dane z tradycyjnego formularza .

Prawidłowe ujęcie na żywo przewodów zawierających Twoje żądanie Ajax.

Jeśli poszukasz w sieci wyników, jak to zrobić, znajdziesz różne odpowiedzi, a to będzie tylko kolejna kropla w przysłowiowym wiadrze.

Ale jeśli jesteś ciekaw przepisu na to, jak sobie z tym poradzić, za każdym razem tak to robię.

Bezpieczne żądania Ajax w WordPress

Proces wysyłania bezpiecznych żądań Ajax dla WordPressa przebiega zgodnie z następującą procedurą:

  1. umieść plik JavaScript w kolejce i użyj wp_localize_script ,
  2. upewnij się, że Twój JavaScript wysyła zabezpieczenie nonce,
  3. sprawdź wartość bezpieczeństwa w swoim oddzwonieniu i odpowiednio ją obsługuj.

Mając to na uwadze, oto kilka elementów każdego z powyższych, które, miejmy nadzieję, doprowadzą Cię do napisania bezpieczniejszego kodu opartego na Ajax.

1 Umieść JavaScript w kolejce, zlokalizuj swój skrypt

Wiem, że wydaje się to dziwnym pierwszym krokiem, biorąc pod uwagę, że powinieneś to napisać przed umieszczeniem go w kolejce. I oczywiście powinieneś. Ale w tym poście chciałem pokazać niezbędny kod przed przejściem do szczegółów.

Istnieje kilka sposobów, w jakie ludzie decydują się na umieszczanie w kolejce admin-ajax.php, ale jest to proces, który stosuję zarówno w przypadku umieszczania mojego pliku w kolejce, jak i dodawania admin-ajax.php:

Zauważ, że w powyższym kodzie wywołanie wp_enqueue_script wygląda dokładnie tak, jak można by się tego spodziewać.

Ale wp_localize_script jest trochę inny. Oto, co robi:

  1. Wynika z wezwania do umieszczenia skryptu w kolejce (a kolejność ma znaczenie),
  2. używa tego samego identyfikatora, czyli acme-security ,
  3. Definiuje obiekt, którego możemy użyć w naszym kodzie JavaScript o nazwie acme_ajax_object i definiuje dwie właściwości.
  4. Właściwość ajax_url utrzymuje ścieżkę do admin-ajax.php.
  5. Właściwość security utrzymuje wartość zwróconą przez wp_create_nonce.

Jak więc wykorzystać to wszystko w kontekście naszego JavaScript?

2 Używanie tych informacji w JavaScript

Po pierwsze, wykonując wywołanie Ajax, musimy upewnić się, że używamy  właściwości ajax_url obiektu, który zdefiniowaliśmy w powyższym kodzie. Oznacza to, że adres URL żądania powinien zostać wysłany do acme_ajax_object.ajax_url.

Następnie definiujesz funkcję, którą chcesz wywołać. W tym przypadku jest to get_custom_date, którym zajmiemy się za chwilę.

Ale najważniejsza część jest następna: Następnie upewniamy się, że wysyłamy wartość bezpieczeństwa, która jest utrzymywana przez właściwość bezpieczeństwa acme_ajax_object.

$.get( acme_ajax_object.ajax_url, { action: 'get_custom_data', security: acme_ajax_object.security }, function( response) { if (undefined !== response.success && false === response.success) { return; } // Parse your response here. });

Zauważ, że w funkcji odpowiedzi sprawdzamy, czy odpowiedź zakończyła się powodzeniem, odpowiednio ją obsługujemy, a następnie idziemy dalej z naszym kodem.

Jak więc wygląda kod po stronie serwera?

3 Weryfikacja bezpieczeństwa

Następnie w funkcji zwrotnej (którą odpowiednio nazwaliśmy get_custom_data, musimy najpierw sprawdzić wartość bezpieczeństwa, zanim zrobimy cokolwiek innego.

Jeśli wartość przejdzie, możemy iść; w przeciwnym razie musimy wysłać błąd.

Zauważ, że kiedy wywołujemy check_ajax_referer, używamy klucza wartości zdefiniowanej w wp_create_nonce i nazwy właściwości obiektu, który zdefiniowaliśmy w pierwszym kroku.

Jeśli się nie wymelduje, wysyłamy błąd JSON, który możemy odczytać w JavaScript, jak widzieliśmy powyżej. To zawsze powinien być pierwszy krok przed wykonaniem właściwej pracy.

Jeśli wszystko się sprawdzi, możemy iść.

Czy to naprawdę bezpieczne?

To jest nieuniknione pytanie, prawda? Szczerze mówiąc, nie chcę obiecać, że jest to całkowicie niezawodne, ponieważ nie jestem ekspertem od bezpieczeństwa.

Ale posiadanie wartości jednorazowej, która wykorzysta wbudowane funkcje bezpieczeństwa WordPressa, jest lepsze niż wysyłanie danych na ślepo bez możliwości zweryfikowania źródła tego, co jest wysyłane.

Oczywiście musisz również oczyścić dane przed ich przesłuchaniem, użyciem ich, potencjalnie ich zapisaniem i tak dalej. Ale to jest treść innego posta.

To zamiast tego zapewnia przepis na upewnienie się, że wysyłasz bezpieczne żądania Ajax w WordPress.

Źródło nagrywania: tommcfarlin.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów