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

Терминология Xml Escaping/Encoding

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

Xml Encoding

Xml Escaping

Encoded Html

Скрытый URL

...

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Теперь, в основном, каждый слой должен "разговаривать" со всеми остальными, и им приходится выбирать язык, на котором они могут разговаривать. Это называется кодировкой. Существуют различные типы кодировок, такие как 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.

Ответ 3

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

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

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

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

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