Czy dane wyjściowe HTML powinny być przekazywane przez esc_html () ORAZ wp_kses ()?

11

Jestem zdezorientowany co do różnych zastosowań esc_html()i wp_kses(). Rozumiem, że esc_html()konwertuje znaki specjalne do ich encji HTML i wp_kses()usuwa niechciane tagi (np. <script>), Ale nie jestem pewien, w jakich kontekstach należy ich używać razem lub osobno.

Jeśli uruchomię trochę niezaufanego HTML esc_html(), wtedy dowolny JavaScript będzie wyświetlany zwykłym tekstem, a nie renderowany przez przeglądarkę, więc jest to bezpieczne w tym momencie, prawda? Jedynym powodem, aby go uruchomić, wp_kses()byłoby uniknięcie wyświetlania surowego skryptu?

Zasadniczo esc_html()czyni go bezpiecznym i wp_kses()ładnym. Czy to jest poprawne?

Ian Dunn
źródło

Odpowiedzi:

16

Ogólna reguła, przynajmniej tak, jak zaleca Mark Jaquith , polega na dezynfekcji na wejściu, ucieczce na wyjściu (następstwem tej reguły jest wczesna dezynfekcja, ucieczka późno ).

Zatem: używaj filtrów dezynfekujących (takich jak kses()rodzina) podczas przechowywania niezaufanych danych w bazie danych i używaj filtrów ucieczki (tj. esc_*()Rodziny) podczas wysyłania niezaufanych danych w szablonie .

Chip Bennett
źródło
14

Z funkcji kses należy korzystać, gdy chcesz, aby w wyniku był jakiś podzbiór HTML. Na przykład komentarze pozwalają na umieszczenie w nich kodu HTML dla pogrubienia, kursywy, linków itp.

Funkcji esc_html należy używać do całkowitego ucieczki HTML. Żaden HTML nie przejdzie przez to bez konwersji do czegoś, co zostanie zinterpretowane przez przeglądarkę jako nie HTML.

Otto
źródło