No puede insertar datos proporcionados por el usuario en un documento HTML sin codificarlo primero. Su objetivo es garantizar que la estructura del documento no pueda modificarse y que los datos siempre se traten como valores de datos y nunca como marcas HTML o código JavaScript. Los ataques contra este mecanismo se conocen comúnmente como "scripting entre sitios", o simplemente "XSS".
Si inserta en un valor de atributo HTML, entonces debe asegurarse de que la cadena no puede hacer que el valor del atributo termine prematuramente. También debe, por supuesto, asegurarse de que la etiqueta en sí no se puede finalizar. Puede lograr esto mediante la codificación HTML de cualquier carácter que no esté garantizado.
Si escribe HTML para que el valor del atributo de la etiqueta aparezca dentro de un par de caracteres de comillas dobles o comillas simples, solo necesita asegurarse de que html-encode el carácter de comillas que eligió usar. Si es no citando correctamente sus atributos como se describe anteriormente, entonces debe preocuparse por muchos más caracteres, incluyendo espacios en blanco, símbolos, signos de puntuación y otros caracteres de control ascii. Aunque, para ser honesto, es sin duda más seguro codificar estos caracteres no alfanuméricos de todos modos.
Recuerde que un valor de atributo HTML puede aparecer en 3 diferentes contextos sintácticos:
valor entre comillas dobles atributo
<input type="text" value="**insert-here**" />
Sólo es necesario codificar el carácter de comillas dobles en HTML a una adecuada valor seguro como "
Valor de atributo entre comillas simple
<input type='text' value='**insert-here**' />
Sólo es necesario para codificar el carácter comilla simple en un valor seguro para HTML adecuado, tal como ‘
valor de atributo sin comillas
<input type='text' value=**insert-here** />
Usted debe nunca tener una etiqueta HTML valor de atributo sin comillas, pero a veces esto está fuera de tu control. En este caso, realmente debemos preocuparnos por el espacio en blanco, la puntuación y otros caracteres de control, ya que nos separarán del valor del atributo.
Con excepción de los caracteres alfanuméricos, escape todos los caracteres con valores ASCII menores que 256 con el formato &#xHH;
(o una entidad con nombre si está disponible) para evitar el cambio del atributo. atributos no cotizados se pueden romper de con muchos personajes, incluyendo [space]
%
*
+
,
-
/
;
<
=
>
^
y |
(y más). [para levantado de OWASP]
Recuerde que las reglas anteriores solo se aplican a la inyección de control cuando se inserta en un valor de atributo HTML. En otras áreas de la página, se aplican otras reglas.
Consulte el XSS prevention cheat sheet at OWASP para obtener más información
Ahem. ¡Creo que te refieres a ** desinfección ** en lugar de ** saneamiento **! –
@John: Puede ser muy correcto en eso: p – Svish
http://xkcd.com/327/ debería explicar este problema. –