¿Son lo mismo que XML, quizás más el espacio uno (
)?
He encontrado algunas listas enormes de caracteres de escape HTML, pero no creo que se deban escapar. Quiero saber qué se debe escapar.
¿Son lo mismo que XML, quizás más el espacio uno (
)?
He encontrado algunas listas enormes de caracteres de escape HTML, pero no creo que se deban escapar. Quiero saber qué se debe escapar.
Si está insertando contenido de texto en su documento en una ubicación donde se espera contenido de texto 1 , generalmente solo necesita escapar de los mismos caracteres que lo haría en XML . Dentro de un elemento, esto solo incluye la entidad escapar del signo &
y el delimitador del elemento menor que y mayor que signos <
>
:
& becomes &
< becomes <
> becomes >
Dentro de los valores de los atributos también debe escapar del carácter de comillas que está utilizando:
" becomes "
' becomes '
En algunos casos, puede ser seguro omitir escapar de algunos de estos personajes, pero lo aliento a escapar de los cinco en todos los casos para reducir la posibilidad de cometer un error.
Si la codificación de su documento no es compatible con todos los caracteres que está utilizando, por ejemplo, si está tratando de usar emoji en un documento codificado en ASCII, también debe escapar de ellos. La mayoría de los documentos en estos días están codificados utilizando la codificación UTF-8 totalmente compatible con Unicode donde esto no será necesario.
En general, no debes escapar de espacios como
.
No es un espacio normal, es un espacio que no se rompe . Puede usar estos en lugar de espacios normales para evitar que se inserte un salto de línea entre dos palabras, o para insertar espacio adicional sin que se contraiga automáticamente, pero esto suele ser un caso raro. No haga esto a menos que tenga una restricción de diseño que lo requiera.
1 Por "una ubicación donde se espera contenido de texto", quiero decir dentro de un elemento o valor de atributo citado donde se aplican las reglas de análisis normales. Por ejemplo: <p>HERE</p>
o <p title="HERE">...</p>
. Lo que escribí anteriormente no se aplica al contenido que tiene reglas de análisis o significado especiales, como dentro de un script o etiqueta de estilo, o como un elemento o nombre de atributo. Por ejemplo: <NOT-HERE>...</NOT-HERE>
, <script>NOT-HERE</script>
, <style>NOT-HERE</script>
, o <p NOT-HERE="...">...</p>
.
En estos contextos, las reglas son más complicadas y es mucho más fácil introducir una vulnerabilidad de seguridad. Le recomiendo encarecidamente que nunca inserte contenido dinámico en ninguna de estas ubicaciones. He visto equipos de desarrolladores competentes conscientes de la seguridad que introducen vulnerabilidades al suponer que habían codificado estos valores correctamente, pero que les falta un caso extremo. Por lo general, hay una alternativa más segura, como colocar el valor dinámico en un atributo y luego manejarlo con JavaScript.
Si debe hacerlo, lea las Reglas de prevención XSS del Proyecto de seguridad de aplicaciones web abiertas para comprender algunas de las inquietudes que deberá tener en cuenta.
<p onclick="NOT-HERE">...</p>
y<p style="NOT-HERE">...</p>
.Depende del contexto. Algunos contextos posibles en HTML:
Consulte la hoja de trucos de prevención de scripts de sitios cruzados de OWASP , especialmente las secciones " ¿Por qué no puedo simplemente codificar datos no confiables de la entidad HTML? " Y las " Reglas de prevención de XSS ". Sin embargo, es mejor leer todo el documento.
fuente
Básicamente, hay tres personajes principales que siempre deben escaparse en sus archivos HTML y XML, por lo que no interactúan con el resto de las marcas, por lo que, como es de esperar, dos de ellos serán los contenedores de sintaxis, que son < >, se enumeran a continuación:
También podemos usar comillas dobles (") como" y comillas simples (') como & apos
Evite poner contenido dinámico
<script>
y<style>
. Estas reglas no se aplican para ellos. Por ejemplo, si tiene que incluir JSON en a, reemplace <con \ x3c, el carácter U + 2028 con \ u2028 y U + 2029 con \ u2029 después de la serialización JSON).Caracteres de escape HTML: Lista completa: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
Por lo tanto, debe escapar <, o & cuando le sigue cualquier cosa que pueda comenzar una referencia de caracteres. Además, la regla sobre los símbolos de unión es la única regla para los atributos entre comillas, ya que las comillas coincidentes son lo único que terminará con una. Pero si no desea terminar el valor del atributo allí, evite las comillas.
fuente
La respuesta exacta depende del contexto. En general, estos caracteres no deben estar presentes ( HTML 5.2 §3.2.4.2.5 ):
Estas restricciones están dispersas en la especificación. Por ejemplo, los valores de los atributos ( §8.1.2.3 ) no deben contener un signo ambiguo y deben estar (i) vacíos, (ii) entre comillas simples (y, por lo tanto, no deben contener el carácter U + 0027 APOSTROPHE
'
), (iii) entre comillas dobles ( no debe contener el carácter de MARCA DE COTIZACIÓN U + 0022"
), o (iv) sin comillas, con las siguientes restricciones:fuente