Есть ли встроенный помощник Magento для экранирования выходных данных шаблона для предотвращения XSS?
Или я должен просто использовать PHP htmlspecialchars
или htmlentities
функции?
Есть ли встроенный помощник Magento для экранирования выходных данных шаблона для предотвращения XSS?
Или я должен просто использовать PHP htmlspecialchars
или htmlentities
функции?
Ответы:
Есть несколько вспомогательных методов в зависимости от контекста. Все они определены в,
Mage_Core_Helper_Abstract
но также и вMage_Core_Block_Abstract
, так что вы можете использовать их$this->...()
в каждом шаблоне:escapeHtml()
: Он фактически используетhtmlspecialchars
рекомендуемые параметры для экранирования HTML:$result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
- кроме того, вы можете указать белый список разрешенных тегов и вызвать метод в массиве, чтобы экранировать все элементы одновременно. Используйте это для любого встроенного текста.quoteEscape()
: более простая версия без белого списка и обработки массива, но эта экранирует как одинарные, так и двойные кавычки, что полезно для текста в атрибуте HTML .jsQuoteEscape()
: этот экранирует одинарные кавычки с обратной косой чертой. Он используется для экранирования строковых литералов в JavaScript. Но это не безопасно . (Пример от @Xorax:)'test\\\'+alert("powned");//'
. Необходим дополнительный выход из обратной косой черты. ИспользуйтеquoteEscape()
вместо этого!escapeUrl()
Я не знаю, почему этот метод существует, это не строки кодирования URL, а просто старыйhtmlspecialchars()
без каких-либо параметров. Не используйте это. Когда-либо.На заметку о том,
urlEncode()
что также применяется не кодирование URL, а base64 ... Не используйте его, если вы точно не знаете, что вам нужно.Да, наименование противоречиво. После того, как все эти имена методов были по схеме ,
somethingEscape()
но потом кто - то решил принизитьhtmlEscape()
иurlEscape()
в пользу новых методов и забыли оquoteEscape()
иjsQuoteEscape()
.источник
Просто переведите это
Вы всегда должны использовать стандартную функцию перевода
В экземпляре блока
Где-нибудь еще
И использовать его так же, как вы использовали бы
sprintf
с PHPНапример.
Или избежать этого
В экземпляре блока
Где-нибудь еще
С помощью
Mage/Core/Helper/Abstract.php
Например.
источник
Mage_Core_Block_Abstract::htmlEscape()
устарело с Magento v 1.4.0.0-rc1 иMage_Core_Block_Abstract::escapeHtml()
должно использоваться вместо него.$this->__('Hello %s', '<script>alert("XSS!")</script>')
.Классы
Mage_Core_Block_Abstract
иMage_Core_Helper_Abstract
оба используют однуMage_Core_Helper_Abstract::escapeHtml
и ту же функцию, и ее реализация внутренне использует функцию PHP htmlspecialchars, кроме реализации некоторой дополнительной логики для массивов с содержимым HTML.Доступ к функции возможен во всех классах блоков и помощников через $ this, и поскольку функция общедоступна, вы можете использовать ее через Mage :: helper ('core') или какой-либо другой вспомогательный класс, где угодно.
источник
Для испанского конвертировать:
источник