Xml Escapeing / Encoding терминология - PullRequest
19 голосов
/ 18 апреля 2009

Я запутался в разнице между терминами "экранирование" и "кодировка" в таких фразах, как:

Кодировка XML

Xml Escape

Кодированный HTML

Ускоренный URL

...

Кто-нибудь может мне это объяснить?

Ответы [ 3 ]

27 голосов
/ 18 апреля 2009

Кодировка описывает, как физически символы файла записываются в двоичном формате (как в Unicode или ANSI).

Экранирование относится к процессу замены специальных символов (таких как < и >) их XML-сущностью эквивалентом (таким как &lt; и &gt; ). Для URL экранирование означает замену символов строками, начинающимися с %, например %20 для одного пробела.

Экранирование отличается в зависимости от языка, но кодировки обычно являются общепринятыми стандартами. Иногда эти термины используются неоднозначно (особенно в том случае, если кодирование означает «экранирование»), но они четко определены и различны.

6 голосов
/ 14 октября 2012

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

Теперь, по сути, каждый слой должен «общаться» друг с другом, и они должны выбирать язык, на котором они могут говорить. Это называется кодированием. Существуют различные типы кодировок, такие как ASCII, UTF-8, UTF-16 и т. Д. Теперь, если пользователь является, например, китайцем или японцем, то для него ASCII не будет работать, поэтому он продолжит работу с UTF-16 или любым другим методом кодирования, который будет гарантировать связь на китайском языке. Таким образом, из веб-уровня китайские иероглифы будут проходить через бизнес-уровень, а затем - на уровень данных, и везде будет использоваться одна и та же схема «кодирования».

Почему?

Теперь предположим, что ваш веб-уровень отправляет данные в UTF-16, поддерживающем китайский язык, но уровень базы данных принимает только ASCII, тогда уровень базы данных будет сбит с толку относительно того, о чем вы говорите! он понимает только английские символы, он не понимает остальных. Это было о кодировке.

Побег:

Существует определенный набор данных, называемый «метаданными», которые имеют особое значение с точки зрения браузеров. Например, <> - это метаданные с точки зрения браузера. Парсер браузеров знает, что все данные, содержащиеся в этих <>, должны быть интерпретированы. Теперь злоумышленники используют эту технику, чтобы сбить с толку браузеры. Например:

<input type="text" value="${name} />

если я заменю имя на

name="/><script>alert(document.cookie)</script>

Тогда результирующий код, как видит браузер, будет

<input type="text" value=""/><script>alert(document.cookie)</script> />

Значит, теперь вам нужно указать браузеру, что все, что я вставил в name="", должно быть "экранировано" или должно рассматриваться только как данные. Таким образом, существуют различные функции, которые либо кодируют / экранируют <> в качестве своего HTML-эквивалента %3C%3E, поэтому теперь браузер знает, что с этим нужно обращаться по-разному. По сути, избегать означает избегать их истинного значения (грубо говоря).

 <input type="text" value="${fn:escapeXML(name)} />

с использованием JSTL.

0 голосов
/ 21 апреля 2013

TL; DR Оба термина являются взаимозаменяемыми (если вы имеете в виду преобразование некоторых символов, чтобы они интерпретировались как простые строковые данные). Эта дискуссия старая. С CWE-116: неправильное кодирование или экранирование вывода :

Использование терминов «кодировка» и «экранирование» широко варьируется. За Например, в некоторых языках программирования используются термины взаимозаменяемо, в то время как другие языки предоставляют API, которые используют оба условия для разных задач. Это перекрывающееся использование распространяется на Интернет, такие как «escape» функция JavaScript, назначение которой указано в кодирование. Конечно, концепции кодирования и экранирования предшествуют Веб десятилетиями. Учитывая такой контекст, CWE трудно принять последовательный словарь, который не будет неверно истолкован некоторыми избирательный округ.

Довольно странно, что JavaScript также имеет encodeURIComponent(), а его спецификация полностью избегает споров:

Функция encodeURIComponent вычисляет новую версию URI в который каждый экземпляр определенных символов заменяется одним, двумя, три или четыре escape-последовательности, представляющие кодировку UTF-8 характер.

Лично я считаю, что более уместно называть общий процесс «кодированием», так как вы создаете код для передачи по каналу связи (фрагмент кода разметки / программирования) и интерпретируется получателем (парсером). Я думаю, что глупо заменять < чем-то совершенно другим, например &#60;, и называть это "побегом".

...