Chcę się upewnić, że wszystkie dane w moich wtyczkach / motywach są bezpiecznie obsługiwane przed wejściem do bazy danych i przed wysłaniem do przeglądarki. Mój problem polega na tym, że istnieją sytuacje, w których interfejs API zajmuje się czyszczeniem dla Ciebie - na przykład podczas zapisywania pól meta - i inne, w których autor wtyczki / motywu jest w pełni odpowiedzialny za to - na przykład podczas zapisywania ustawień niestandardowych.
Jeśli chodzi o zakres tego pytania, nie martwię się o sprawdzanie poprawności danych na poziomie domeny - np. Sprawdzanie, czy pole Wiek w formularzu ma wartość od 0 do 120 lub czy adres e-mail jest prawidłowy. Martwię się tylko o bezpieczeństwo - np. Unikanie zapytań SQL, aby uniknąć wstrzyknięcia SQL podczas zapisywania do bazy danych, lub czyszczenie danych, które są wyprowadzane do szablonów HTML, aby uniknąć XSS.
Dla wyjścia sanityzacji, wiem, że zawsze trzeba korzystać z funkcji takich jak esc_html()
i esc_attr()
kiedy echo'ing zmiennych do szablonów HTML. Ale co z użyciem tagów szablonów ? Czy wszyscy już oczyszczają produkt? Jeśli tak, to w jakim kontekście (ogólny HTML, atrybuty znaczników itp.)? Niektóre funkcje mają warianty dla różnych kontekstów (jak the_title_attribute()
, ale większość nie.
W przypadku dezynfekcji danych wejściowych wiem, że muszę tego używać $wpdb->prepare()
podczas ręcznego wysyłania zapytań, ale co z używaniem interfejsu API ustawień do utworzenia strony ustawień wtyczki lub zapisaniem pól meta post dla niestandardowego typu postu?
W tej chwili właśnie przeglądałem Core i czytałem tutoriale za każdym razem, gdy korzystam z funkcji, aby dowiedzieć się, czy się odkaża, czy nie, ale jest to podatne na błędy i czasochłonne. Mam nadzieję znaleźć jakąś kompleksową listę wszystkich możliwych sytuacji i tego, czy API to obsługuje, czy nie. na przykład,
API sprawdza / odkaża
- Zapisywanie meta postu za pomocą
update_postmeta()
- Zapisywanie meta użytkownika za pomocą
update_user_meta()
- Wypisywanie tytułu postu - użyj odpowiedniego kontekstowo wariantu
the_title()
- itp
Musisz ręcznie sprawdzić poprawność / odkażać
- Zapisywanie opcji wtyczki za pomocą interfejsu API ustawień. Przekaż wywołanie zwrotne jako trzeci parametr parametru
register_setting()
. - Bezpośrednie zapytania do bazy danych: Zawiń zapytanie
$wpdb->prepare()
. - Wyprowadzanie zmiennych w HTML. Zastosowanie
esc_attr()
,esc_html()
itp - itp
Byłbym również zainteresowany, aby zrozumieć, dlaczego interfejs API zapewnia go w niektórych sytuacjach, ale nie w innych. Zakładam, że ma to związek z nieznaną naturą danych, ale chciałbym usłyszeć dokładne wyjaśnienie.
the_title()
, the_permalink()
etc), które są w porządku, ale z danych niestandardowych nie są (na przykład get_post_meta()
). W razie wątpliwości oczyść siebie - to nie zaszkodzi.