Czy jest wbudowany pomocnik Magento do ucieczki z danych wyjściowych szablonu, aby zapobiec XSS?
A może powinienem po prostu użyć PHP htmlspecialchars
lub htmlentities
funkcji?
Czy jest wbudowany pomocnik Magento do ucieczki z danych wyjściowych szablonu, aby zapobiec XSS?
A może powinienem po prostu użyć PHP htmlspecialchars
lub htmlentities
funkcji?
Odpowiedzi:
Istnieje kilka metod pomocniczych w zależności od kontekstu. Wszystkie są zdefiniowane w,
Mage_Core_Helper_Abstract
ale także wMage_Core_Block_Abstract
, więc możesz używać ich z$this->...()
każdym szablonem:escapeHtml()
: W rzeczywistości wykorzystujehtmlspecialchars
zalecane parametry do ucieczki HTML:$result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
- dodatkowo można określić białą listę dozwolonych tagów i wywołać metodę na tablicy, aby uciec od wszystkich elementów jednocześnie. Użyj tego dla dowolnego tekstu wstawianego.quoteEscape()
: prostsza wersja bez białej listy i przetwarzania tablic, ale ta unika pojedynczych cudzysłowów, a także podwójnych cudzysłowów, użytecznych dla tekstu w atrybucie HTML .jsQuoteEscape()
: ten unika pojedynczych cudzysłowów odwrotnym ukośnikiem. Służy do ucieczki literałów łańcuchowych w JavaScript. Ale to nie jest bezpieczne . (Przykład autorstwa @Xorax:)'test\\\'+alert("powned");//'
. Konieczne jest dodatkowe unikanie ukośników odwrotnych. UżyjquoteEscape()
zamiast tego!escapeUrl()
: Nie wiem, dlaczego ta metoda istnieje, nie jest to ciąg znaków kodowania adresu URL, jest po prostu staryhtmlspecialchars()
bez żadnego parametru. Nie używaj tego. Zawsze.W pokrewnej notatce jest
urlEncode()
też kodowanie URL, ale zamiast tego base64 ... Nie używaj go, jeśli nie wiesz dokładnie, czego potrzebujesz.Tak, nazewnictwo jest niespójne. Gdy wszystkie te nazwy metod zostały zgodnie ze schematem
somethingEscape()
, ale potem ktoś zdecydował się potępiaćhtmlEscape()
iurlEscape()
przyjęciem nowych metod i zapomniał oquoteEscape()
ajsQuoteEscape()
.źródło
Po prostu to przetłumacz
Zawsze powinieneś używać standardowej funkcji tłumaczenia
W wystąpieniu bloku
Gdziekolwiek indziej
I używaj go w taki sam sposób, jak
sprintf
w PHPNa przykład.
Lub uciec
W wystąpieniu bloku
Gdziekolwiek indziej
Za pomocą
Mage/Core/Helper/Abstract.php
Na przykład.
źródło
Mage_Core_Block_Abstract::htmlEscape()
jest przestarzała od Magento v 1.4.0.0-rc1 iMage_Core_Block_Abstract::escapeHtml()
powinna być używana zamiast tego.$this->__('Hello %s', '<script>alert("XSS!")</script>')
.Klasy
Mage_Core_Block_Abstract
iMage_Core_Helper_Abstract
obie używają tej samej funkcji,Mage_Core_Helper_Abstract::escapeHtml
a jej implementacja wykorzystuje wewnętrznie funkcję PHP htmlspecialchars oprócz implementacji dodatkowej logiki dla tablic z zawartością HTML.Dostęp do funkcji można uzyskać we wszystkich klasach bloków i pomocników za pomocą $ this, a ponieważ funkcja jest publiczna, można jej używać za pośrednictwem Mage :: helper ('core') lub innej klasy pomocniczej, gdziekolwiek indziej.
źródło
W przypadku konwersji hiszpańskiej:
źródło