Dostałem opinię od ochroniarza, który zwrócił uwagę, że powinienem użyć poprawnego ucieczki od danych wejściowych użytkownika w moim kodzie. Przeprowadziłem więc badania i znalazłem funkcje ucieczki.
Jaka jest różnica między nimi? Kiedy powinienem używać esc_html()
i kiedy esc_attr()
? A kiedy powinienem używać tych funkcji _e()
na końcu?
Odpowiedzi:
esc_html()
unika ciągu, aby nie był analizowany jako HTML. Znaki takie<
są<
na przykład konwertowane na. Będzie to wyglądać tak samo dla czytnika, ale oznacza to, że jeśli wyświetlana jest wartość,<script>
to nie będzie interpretowana przez przeglądarkę jako rzeczywisty znacznik skryptu.Użyj tej funkcji, ilekroć wyprowadzana wartość nie powinna zawierać HTML.
esc_attr()
unika ciągu, dzięki czemu można go bezpiecznie używać w atrybucie HTML,class=""
na przykład. Zapobiega to wyrwaniu się wartości atrybutu HTML. Na przykład, jeśli wartość wynosi"><script>alert();</script>
i próbujesz wyprowadzić ją w atrybucie HTML, zamknie bieżący znacznik HTML i otworzy znacznik skryptu. To jest niebezpieczne. Po usunięciu wartości nie będzie w stanie zamknąć atrybutu HTML oraz oznaczyć i wygenerować niebezpiecznego kodu HTML.Użyj tej funkcji, gdy wyprowadzasz wartość wewnątrz atrybutu HTML.
esc_url()
unika ciągu, aby upewnić się, że jest to prawidłowy adres URL.Użyj tej funkcji, gdy wypisujesz wartość wewnątrz atrybutu
href=""
lubsrc=""
.esc_textarea()
ucieka z wartości, aby można było bezpiecznie używać jej w<textarea>
elemencie. Poprzez ucieczkę wartości za pomocą tej funkcji zapobiega ona<textarea<
zamykaniu<textarea>
elementu i wysyłaniu własnego kodu HTML przez wartość wyprowadzaną wewnątrz a .Użyj tej funkcji, gdy wyprowadzasz wartość wewnątrz
<textarea>
elementu.esc_html()
aesc_attr()
także wersje kończące się__()
,_e()
a_x()
. Są one przeznaczone do wyprowadzania ciągów podlegających tłumaczeniu.WordPress posiada funkcje
__()
,_e()
a_x()
na wpisywanie tekstu, który może być tłumaczone.__()
zwraca ciąg do przetłumaczenia,_e()
powtarza ciąg do przetłumaczenia i_x()
zwraca ciąg do tłumaczenia w danym kontekście. Prawdopodobnie widziałeś ich wcześniej.Ponieważ niekoniecznie można ufać plikowi tłumaczenia, który zawiera bezpieczne wartości, użycie tych funkcji podczas wyprowadzania łańcucha do przetłumaczenia gwarantuje, że wyprowadzane ciągi nie mogą powodować tego samego problemu opisanego powyżej.
Używaj tych funkcji przy wysyłaniu ciągów do przetłumaczenia.
źródło
esc_html
iesc_attr
stosowany jest ten sam kod (oni po prostu mają inny nieużywany filtr): wordpress.stackexchange.com/questions/264698/...esc_html
byłby używany wewnątrz html, na przykład między<p>
tagiemesc_attr
byłby używany do zmiany wartości atrybutów w tagach HTML takich jak:zastosowanie
_e
do końca służy do używania go z domenami tekstowymi i automatycznie wyświetli dla ciebie echo, np .:oprócz tego
_e
istnieje również to,__
co robi to samo,_e
ale nie echo, więc możesz zapisać go w zmiennej.źródło
_e
służy nie tylko do echa, ale także do lokalizacji. Dlatego powinien być używany tylko wtedy, gdy ciąg znaków jest przekazywany do funkcji i powinien zawierać domenę tekstową. Twój ostatni przykład niewłaściwie go używa.