HTML: кодировать больше или нет? (>>) - PullRequest
42 голосов
/ 26 января 2012

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

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

Я думаю, что кто-то может сделать это:

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

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

Ответы [ 6 ]

36 голосов
/ 26 января 2012

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

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

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

16 голосов
/ 26 января 2012

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

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

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

4 голосов
/ 26 января 2012

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

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

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

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

(Обратите внимание, как подсветка синтаксиса обрабатывает этот фрагмент!)

0 голосов
/ 15 октября 2018

Да, потому что если знаки не были закодированы, это позволяет использовать xss в социальных сетях форм и многое другое, потому что злоумышленник может использовать тег <script>. Если вы проанализируете знаки, браузер не выполнит их, а вместо этого покажет знак.

0 голосов
/ 26 января 2012

Всегда

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

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

0 голосов
/ 26 января 2012

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

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

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

...