Обеспечивает ли html_entity_decode() безопасный вывод?

Работаем с сайтом по продаже автомобилей Autotrader и они не выводят html символы. Вместо этого они не позволяют использовать символы, преобразовывая их в свои сущности и выводя только это.

По какой-то причине они не считают необходимым декодировать объекты для вывода.

Это приводит меня к другому вопросу о моем собственном веб-сайте.

Я использую HTMLPurifier для безопасного сохранения и вывода пользовательского ввода.

Это преобразует все символы и ‹ и т. д. в их сущности.

Каков правильный способ вывода html-объектов, но как их правильные символы в PHP?

Я использую html_entity_decode(), который работает. Но мне пришло в голову, что на самом деле это может буквально изменить символы обратно и снова разрешить атаки XSS и т. Д.

Как я могу PHP отобразить строку, содержащую объекты, но правильно и безопасно отображать символы?


person Lovelock    schedule 14.07.2014    source источник
comment
Просто отправьте его в браузер с сущностями, браузер покажет их как настоящие символы - безопасно, как вы это называете.   -  person MightyPork    schedule 14.07.2014


Ответы (1)


Не декодировать, отправить строку с сущностями прямо в HTML-вывод.

Объекты HTML будут правильно отображаться в браузере пользователя. Когда вы выводите из PHP

echo "Hello kitty!<script>steal_her_password();</script>";

тогда пользователь правильно увидит

Hello kitty!<script>steal_her_password();</script>

но если вы сначала декодируете эту строку, то пользователь увидит только

Hello kitty!

плюс ее пароль будет украден.

person Alexander Gelbukh    schedule 14.07.2014
comment
Благодарю за разъяснение. В качестве примечания, если это так, то почему Autotrader не отображает правильные символы на своем веб-сайте? - person Lovelock; 14.07.2014
comment
Не могли бы вы дать ссылку на конкретную страницу, где они не показывают правильные символы? - person Alexander Gelbukh; 14.07.2014
comment
После поиска объекта я не могу найти никаких примеров, однако все еще есть некоторые проблемы, когда символ фунта отображается с буквой A перед ним. Смотрите здесь в описании autotrader.co.uk/classified/advert/201406305433495/sort/default/ Я предполагаю, что это проблема с набором символов, который они используют. - person Lovelock; 14.07.2014
comment
Однако некоторые люди правильно используют знаки фунта. Могу ли я что-нибудь сделать при перечислении рекламы, чтобы убедиться, что знак фунта отображается правильно? - person Lovelock; 14.07.2014
comment
То, что вы видите, является проблемой кодировки символов: utf-8 против 1252. На указанной вами странице не указана какая-либо кодировка, поэтому она отображается в кодировке по умолчанию, которая в Windows должна быть 1252. Однако символ £ закодирован в utf-8, что случайно соответствует ££ в 1252. Если ваша входная кодировка непротиворечива и контролируется вами, то вам просто нужно быть последовательным в том, чтобы ваша выходная кодировка соответствовала указанной кодировке. Ну и конечно нужно указать кодировку: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">. - person Alexander Gelbukh; 14.07.2014