WordPress

ucieczka — Prawidłowy sposób używania esc_attr() i esc_html()

  • 15 listopada, 2023
  • 2 min read
ucieczka — Prawidłowy sposób używania esc_attr() i esc_html()


Ucieczka polega na wyeliminowaniu potrzeby zaufania lub „powinno to być XYZ” i zamiast tego na siłę zagwarantować, że „to zawsze będzie XYZ”. To jest jak foremka do ciastek, wszystko będzie miało taki kształt na końcu, nawet jeśli nie będzie to ciasto.

esc_attr

Oficjalne dokumenty zawierają odpowiedź:

Kiedy zmienna jest używana jako część atrybutu lub adresu URL, zawsze lepiej jest uciec od całego ciągu w ten sposób potencjalny znak ucieczki tuż przed zmienną zostanie poprawnie zmieniony.

Ucieczka dotyczy kontekstu, więc ukrywanie kontekstu przed nim esc_attr zmniejszasz jego skuteczność. Nie uciekaj od części atrybutu, uciekaj od całego atrybutu i rób to w momencie wyprowadzania.

esc_attr służy do ucieczki przed atrybutem, całym atrybutem. Nie można go użyć do częściowego uniknięcia podsekcji atrybutu, ponieważ nie do tego jest przeznaczony i byłoby to nadużyciem.

Jest to z tego samego powodu, dla którego nie możesz użyć esc_url w podsekcjach adresu URL, esc_url zawsze wyświetla pełny adres URL. Bez kontekstu pełnego adresu URL nie jest możliwe prawidłowe ominięcie go bez wyciekania potencjalnie niebezpiecznych rzeczy lub wyciekania zniekształconych adresów URL, które mogą być niebezpieczne.

Warto przeczytać!  php — Szablon strony quizu, brak zaznaczonego atrybutu po wybraniu opcji

esc_html

esc_html gwarantuje, że ciąg znaków nie będzie zawierał znaczników HTML, i robi to poprzez ucieczkę od nich, dzięki czemu zostaną wydrukowane użytkownikowi, a nie przetworzone i wykonane przez przeglądarkę.

Czy to podejście jest prawidłowe? W szczególności miałem na myśli tę część: … esc_html__(’Konfiguracja i pomoc’, 'moja-plugin’) . ’

Tak! Może się okazać, że niektórzy ludzie uznają ucieczkę z ciągów językowych za niepotrzebną lub nadgorliwą, ale pliki językowe i filtry mogą zostać użyte jako wektor ataku, a robiąc to, chronisz się.

Jeśli wiesz, że ciąg znaków nigdy nie powinien zawierać kodu HTML, ucieczka może zapewnić tego pewną gwarancję.

Ogólnie

Ucieczka polega na egzekwowaniu oczekiwań. esc_html I esc_attr są przeznaczone do różnych celów. Ucieczka nie jest magiczną rzeczą, którą można zastosować do wszystkiego, jest bardzo specyficzna dla kontekstu i użycia, dlatego nie mamy ogólnego escape funkcję, ale zamiast tego mają określone funkcje, takie jak esc_html/esc_textarea/esc_attr/esc_url/wp_kses_post/strip_tags itp

„Ta zmienna zawiera adres URL i teraz go użyłem esc_url To będzie będzie adresem URL, nawet jeśli umieścisz tam coś, czego nie ma. Rezultatem mogą być zniekształcone śmieci, ale tymi śmieciami jest adres URL.”

Więc nie wybieraj i nie aplikuj częściowo. Jeśli chcesz uciec od ciągu znaków, uciec od całego ciągu. Częściowa ucieczka może wydawać się rozsądna, ale jest błędem i sposobem na przeciekanie rzeczy.

  • uciec raz

    Podwójna ucieczka jest zła i starannie przygotowana treść może ją wykorzystać do przebicia się i ujawnienia złośliwych danych. Wyjaśnij, który kod jest odpowiedzialny za ucieczkę i upewnij się, że jest to również kod, który go wypisuje

  • uciec późno

    Nie przypisuj wartości ucieczki do zmiennych, zmienne te mogą zostać zmodyfikowane i uczynić niebezpiecznymi po ucieczce, a to zachęca do przypadkowej podwójnej ucieczki.

  • często uciekaj

    Ucieknij od wszystkiego, co możesz, i rób to w pełni. Nawet jeśli myślałeś, że to częściowa ucieczka powinien będzie dobrze, po co ufać temu? Gwarantuję i mówię ze 100% pewnością, że tak będzie będzie w porządku, uciekając od całości jako jednej jednostki.

    • czy naprawdę ma sens zaśmiecanie kodu dużą ilością malutkich esc_attr wywołuje każdy atrybut, gdy 1 wykona zadanie?
Warto przeczytać!  Najlepszy format obrazu dla WordPress


Źródło