Подтвердить что ты не робот

HTML: Должен ли я кодировать больше или нет? (> >)

При кодировании, возможно, небезопасных данных, есть ли причина для кодирования >?

  • проверяет в любом случае.
  • Браузер интерпретирует то же самое в любом случае (в случаях attr="data", attr='data', <tag>data</tag>)

Я думаю, что причины, по которым кто-то это сделает, -

  • Чтобы упростить удаление тегов на основе регулярных выражений. <[^>]+>? (редко)
  • Строки без кавычек attr=data. : - o (не происходит!)
  • Эстетика в коде. (ну и что?)

Я что-то пропустил?

4b9b3361

Ответ 1

Строго говоря, для предотвращения вставки HTML вам нужно только кодировать < как &lt;.

Если пользовательский ввод будет помещен в атрибут, также закодируйте " как &quot;.

Если вы делаете все правильно и используете правильно цитируемые атрибуты, вам не нужно беспокоиться о >. Однако, если вы не уверены в этом, вы должны закодировать его только для спокойствия - это не повредит.

Ответ 2

Спецификация HTML4 в разделе 5.3.2 гласит, что

авторы должны использовать "&gt;" (ASCII decimal 62) в тексте вместо " > "

поэтому я считаю, что вы должны кодировать более высокий знак > как &gt; (потому что вы должны соблюдать стандарты).

Ответ 3

HTML-парсеры текущих браузеров не имеют проблем с uquoted > s

Однако, к сожалению, использование регулярных выражений для "parse" HTML в JS довольно распространено. (пример: Ext.util.Format.stripTags). Также плохо написанные инструменты командной строки, IDE или классы Java и т.д. Могут быть недостаточно сложными, чтобы определить ограничитель открытого тега.

Итак, вы можете столкнуться с проблемами с кодом, подобным этому:

<script data-usercontent=">malicious();//"></script>

(Обратите внимание, как синтаксический ярлык обрабатывает этот фрагмент!)

Ответ 4

Всегда

Это делается для предотвращения XSS инъекций (через пользователей, использующих любые ваши формы для подачи необработанных HTML или javascript). Выйдя из своего выхода, браузер не знает, как его разобрать или выполнить, только отобразите его как текст.

Это может показаться меньше проблемой, если вы не имеете дело с динамическим выходом, основанным на пользовательском вводе, однако важно хотя бы понять, если не сделать хорошую привычку.

Ответ 5

Кодирование html-символов всегда является деликатной работой. Вы всегда должны кодировать то, что нужно кодировать и всегда использовать стандарты. Использование двойных кавычек является стандартным, и даже кавычки внутри двойных кавычек должны быть закодированы. ENCODE всегда. Представьте себе что-то вроде этого

<div> this is my text an img></div>

Вероятно, img > будет анализироваться из браузера как тег изображения. Браузеры всегда пытаются разрешить закрытые теги или кавычки. Поскольку Basile говорит о стандартах использования, в противном случае вы могли бы получить неожиданные результаты, не понимая источник ошибок.