escaped escape convert characters xml encoding escaping html-encode xml-encoding

convert - xml escape characters



Terminología de Escape/Escape Xml (3)

En cada aplicación web, los datos se componen de varias capas, como la capa de vista, la capa de modelo, la capa de base de datos, etc. Cada capa debe "desarrollarse" de manera independiente para satisfacer diversos requisitos de escalabilidad y mantenimiento.

Ahora, básicamente, cada capa necesita "hablar" entre sí, y tienen que decidir sobre un idioma a través del cual puedan hablar. Esto se llama codificación. Existen varios tipos de codificaciones como ASCII, UTF-8, UTF-16, etc. Ahora, si el usuario es chino o japonés, por ejemplo, para él, ASCII no funcionaría, por lo tanto, seguiría adelante con UTF-16 o cualquier otro. Otra técnica de codificación que garantizaría la comunicación en chino. Entonces, desde la capa web, los caracteres chinos pasarían a través de la capa de negocios, y luego a la capa de datos, y en todas partes, se utilizará el mismo esquema de "codificación".

Por qué ?

Ahora supongamos que su capa web envía datos en UTF-16, compatible con el idioma chino, pero la capa de la base de datos acepta, solo ASCII, entonces la capa de la base de datos se confundirá con respecto a qué está hablando. entiende solo caracteres ingleses, no entiende el resto. Esto fue sobre la codificación.

Escapando

Existe un determinado conjunto de datos llamados "metadatos" que tienen un significado especial desde la perspectiva de los navegadores. Por ejemplo, <> son metadatos desde la perspectiva de los navegadores. El analizador del navegador sabe que todos los datos contenidos dentro de estos <> deben ser interpretados. Ahora los atacantes usan esta técnica para confundir a los navegadores. Por ejemplo :

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

si sustituyo el nombre por

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

Entonces el código resultante como el navegador lo ve será

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

Significa, ahora debe indicar al navegador que todo lo que ponga en el name="" debe "escaparse" o debe considerarse solo como datos. Así que hay varias funciones que codifican / escapan <> como su html equivalente %3C%3E , por lo que ahora el navegador sabe que esto debe tratarse de manera diferente. Básicamente, escapar significa escapar de su significado real (en términos generales).

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

utilizando JSTL.

Estoy confundido en cuanto a la diferencia entre los términos "escapar" y "codificar" en frases como:

Codificación xml

Escape Xml

HTML codificado

Url escapado

...

¿Puede alguien explicármelo?


TL; DR Ambos términos son intercambiables (si lo que quieres decir es convertir algunos caracteres para que se interpreten como datos de cadena simple). Este debate es viejo. Desde CWE-116: codificación o escape inadecuados de la salida :

El uso de los términos "codificación" y "escape" varía ampliamente. Por ejemplo, en algunos lenguajes de programación, los términos se usan indistintamente, mientras que otros lenguajes proporcionan API que usan ambos términos para diferentes tareas. Este uso superpuesto se extiende a la Web, como la función JavaScript de "escape" cuyo propósito se afirma que es la codificación. Por supuesto, los conceptos de codificación y escape son anteriores a la Web por décadas. Dado este contexto, es difícil para CWE adoptar un vocabulario coherente que no sea malinterpretado por algún electorado.

Comicamente, JavaScript también tiene encodeURIComponent() , y su specification evita el debate por completo:

La función encodeURIComponent calcula una nueva versión de un URI en el que cada instancia de ciertos caracteres se reemplaza por una, dos, tres o cuatro secuencias de escape que representan la codificación UTF-8 del carácter.

Personalmente, creo que es más apropiado referirse al proceso general como "codificación", ya que usted está creando un code para ser transmitido a través de un canal de comunicaciones (un código de marcado / programación) e interpretado por un receptor (el analizador). Creo que es una tontería reemplazar < con algo completamente diferente como &#60; y llamamos a eso "escapar".


Encoding describe cómo los caracteres del archivo se escriben físicamente en binario (como en Unicode o ANSI).

Escaping refiere al proceso de reemplazar caracteres especiales (como < y > ) con su entidad XML equivalente (como &lt; y &gt; ). Para las URL, el escape se refiere a la sustitución de caracteres por cadenas que comienzan con % , como %20 para un solo espacio en blanco.

El escape difiere según el idioma, pero las codificaciones suelen ser estándares ampliamente aceptados. A veces, los términos se usan de forma ambigua (especialmente con la codificación utilizada para significar escapar), pero están bien definidos y son distintos.