Нужно ли декодировать html-объекты из поля ввода формы?

У меня есть форма, которая содержит объекты html в поле ввода, например:

<input type="hidden" name="foo" value="<?php htmlspecialchars($foo) ?>" />

Если $foo принимает значение чего-то вроде "<b>foo</b>", кажется, что когда форма отправляется в PHP-скрипт, значение $_POST['foo'] уже декодировано... значит ли это, что я не Не нужно ли использовать htmlspecialchars_decode для преобразования $_POST['foo'] обратно в исходную форму $foo?

Спасибо за любые материалы по этому вопросу.


person tonytz    schedule 27.03.2015    source источник
comment
Зависит от того, если $foo внезапно становится " onclick="maliciuos code", у вас есть проблема, поэтому вы кодируете сущности, чтобы избежать XSS.   -  person adeneo    schedule 27.03.2015
comment
@adeneo, спасибо за ваш комментарий. Да, это правда, но на самом деле я имел в виду необходимость декодирования кода обратно в его исходную форму после того, как закодированный ввод (во избежание XSS) отправляется в php-скрипт.   -  person tonytz    schedule 27.03.2015
comment
Действительно ли он возвращает незакодированные символы ‹ и › или возвращает и ? В первом случае вы не увидите теги HTML при печати на странице. Если второе, то вы увидите теги, но при просмотре исходника страницы вы увидите закодированные символы.   -  person dartonw    schedule 27.03.2015
comment
он возвращает ‹ и › внутри php-скрипта, который получает отправку... без какого-либо декодирования   -  person tonytz    schedule 27.03.2015


Ответы (1)


Когда дело доходит до пользовательского ввода, кодируйте очень осторожно. Никогда не делайте никаких предположений. Хотя начальное состояние может быть установлено сервером, ничто не мешает кому-то изменить значение вашего скрытого ввода в злонамеренное значение. В этот момент вы ответственно относитесь к этому значению, поэтому убедитесь, что вы охватили все возможные случаи.

person david s    schedule 27.03.2015
comment
Спасибо, Дэвид, за ваш вклад, с которым я полностью согласен. однако на самом деле я спрашивал о декодировании закодированного ввода, когда форма отправляется в php-скрипт - person tonytz; 27.03.2015
comment
А, теперь я понимаю! Я мог видеть случай, когда вы все еще можете захотеть расшифровать. Что если значение $foo будет &lt;b&gt;foo&lt;/b&gt;? - person david s; 27.03.2015
comment
да, по какой-то причине переменная $_POST в php, кажется, автоматически декодировала закодированную строку ... не уверен, что это настройка моего сервера или это яблоки для всех остальных - person tonytz; 27.03.2015
comment
Это обычное дело. На самом деле браузер выполняет декодирование заранее. Если вы повторите значение, которое было пропущено через htmlspecialchars два раза, оно будет выведено в браузере в закодированном виде, что означает, что сообщение будет таким же. - person david s; 28.03.2015