Próbuję zrozumieć dezynfekcję danych (nie sprawdzanie poprawności danych), aby pomóc mi napisać bezpieczne motywy dla WordPress. Przeszukałem Internet, próbując znaleźć kompleksowy przewodnik dla twórców motywów zawierający szczegółowe informacje na temat najlepszych praktyk. Znalazłem kilka zasobów, w tym stronę kodeksu zatytułowaną „Sprawdzanie poprawności danych”, ale żadne z nich nie było dla mnie przydatne. Strona kodeksu zawiera listę dostępnych funkcji odkażających, ich użycie i to, co robią, ale nie wyjaśnia, dlaczego miałbyś używać jednej z nich w innej sytuacji lub w jakiej sytuacji używałbyś określonej funkcji odkażania. Celem tego postu jest poproszenie wszystkich o podanie przykładów złego / niezaanalizowanego kodu oraz o tym, jak należy go przepisać w celu poprawnej dezynfekcji. Może to być ogólny kod odkażający tytuł posta lub post thumnails src lub bardziej rozbudowany kod, który obsługuje odkażanie$_POST
dane dla żądań Ajax.
Ponadto chciałbym wiedzieć, czy funkcje WordPress służące do dodawania / aktualizowania bazy danych (np. Wymienione w poniższym bloku kodu) automatycznie zajmują się czyszczeniem? Jeśli tak, to czy są jakieś wyjątki, kiedy podejmowałbyś dodatkowe środki w celu oczyszczenia danych wysyłanych do tych funkcji WordPress?
add_user_meta
update_user_meta
add_post_meta
update_post_meta
//just to name a few
Czy dezynfekcja HTML w PHP jest inna niż w przypadku wbudowanego HTML? Aby wyjaśnić, o co proszę, oto kod:
<?php echo '<div class="some-div ' . $another_class . '" data-id="' . $id . '" >' . $text . '</div>'; ?>
<div class="some-div <?php echo $another_class; ?>" data-id="<?php echo $id; ?>"><?php echo $text; ?></div>
Oba powyższe stwierdzenia osiągają to samo. Ale czy trzeba je santaryzować inaczej?
Odpowiedzi:
Myślę, że ta strona kodeksu całkiem dobrze to wyjaśnia.
Prawdopodobnie najważniejszą i najczęściej używaną funkcją
esc_attr
. Weź ten przykład:Jeśli
$author_name
zawiera"
postać, atrybut zostanie zamknięty, a jeśli poonclick="do_something();"
niej pojawi się znak , może się pogorszyć :)Wykonanie
print esc_attr($author_name)
zapewnia, że takie znaki są zakodowane, a przeglądarka nie robi rzeczy, których nie powinna robić.Jest jeden przypadek, w którym go nie potrzebujesz: kiedy oczekujesz liczby, w którym to przypadku możesz po prostu rzucić dane wejściowe na liczbę całkowitą, na przykład:
Wymienione tam funkcje meta * już dbają o odkażanie danych wejściowych do przechowywania bazy danych, więc nie musisz się tym martwić.
wpdb->prepare()
Metoda musi być stosowana, gdy robisz DB pyta siebie. Oto przykład:%s
I%d
słowa kluczowe zostaną zastąpione ze swoimi odkażonych wartości $ _POST.Bardzo częstym błędem, który widzę w wielu wtyczkach w repozytorium WP.org, jest przekazanie do niego już przygotowanego zapytania (i źle przygotowanego), takiego jak:
Nie rób tego :)
Nie.
źródło
To wideo Marka Jaquitha wyjaśniło mi to wszystko. http://wordpress.tv/2011/01/29/mark-jaquith-theme-plugin-security/
źródło