Wczoraj udostępniłem post o tym, jak używać wp_remote_get
, ale pominąłem alternatywną funkcję: wp_safe_remote_get
. Pierwotnym celem było wykorzystanie pierwszego postu do pokazania:
- Co akceptuje oryginalna funkcja,
- Jak korzystać z oryginalnej funkcji,
- Co zwraca oryginalna funkcja,
- Jak wygląda wdrożenie.
A potem zamierzałem rzucić okiem na wp_safe_remote_get
. Ale jest wyzwanie: mam mądrych przyjaciół. Niedługo po opublikowaniu posta otrzymuję odpowiedź od Roya :
Dzięki, Roy! (Pamiętaj, aby powiedzieć mu „Cześć!". 🙂
Ale poważnie, kontynuacja wczorajszego postu jest dokładnie taka: wp_safe_remote_get
. I jest to jak określić różnicę w tych dwóch funkcjach i kiedy użyjesz jednej nad drugą.
wp_safe_remote_get
Prosto z dokumentacji API dowiadujemy się :
Ta funkcja jest idealna, gdy żądanie HTTP jest kierowane do dowolnego adresu URL. Adres URL jest weryfikowany, aby uniknąć przekierowań i ataków fałszowania żądań.
I podobnie jak jego odpowiednik, akceptuje adres URL i szereg argumentów, które mogą określić sposób wykonania żądania.
Co więcej, podobnie jak wp_remote_get
, zwraca również tablicę danych odpowiedzi lub instancję, WP_Error
jeśli żądanie się nie powiedzie.
Korzystanie z tej funkcji nie różni się od poprzedniej, ale rodzi pytanie:
Kiedy używamy jednego nad drugim? Dokładniej, kiedy używamy wp_remote_get
versus wp_safe_remote_get
?
Przeczytaj źródło
Kiedy masz do czynienia z taką sytuacją, pierwszą najlepszą rzeczą do zrobienia jest przeczytanie źródła:
Jeśli przeczytasz powyższe linki, zauważysz, że ten ostatni odrzuca „niebezpieczne adresy URL”, które są określane przez wp_http_validate_url w serii zaawansowanych kontroli.
Ale nadal, czego używam?
To wciąż pozostawia pytanie bez odpowiedzi, prawda? Myślę, że łatwo jest zrobić ogólne oświadczenie, że zawsze powinieneś używać wp_safe_remote_get (lub wp_safe_remote_post, jeśli o to chodzi).
Wszystkie projekty są jednak inne.
Na przykład, jeśli pracujesz nad wtyczką, która będzie używana tylko w intranecie i masz kontrolę nad, powiedzmy, białą listą adresów URL, które można przekazać do funkcji, możesz użyć tego pierwszego.
Jeśli jednak udostępniasz to drugie użytkownikom, zawsze używaj bezpiecznej wersji funkcji.
W skrócie
Moja praktyczna zasada jest taka (i jest podobna do sanityzacji):
Jeśli użytkownicy zamierzają wchodzić w interakcję z funkcją, upewnij się, że korzystają z najbezpieczniejszej możliwej wersji kodu.
W przeciwnym razie zagrożone jest zbyt wiele.