What's new? | Help | Directory | Sign in
Google
             
Search
for
Updated Sep 11, 2008 by pilgrim
EsArticleXSSInBodyText  

COMO filtrar entradas de usuario en texto de cuerpo regular

English日本語Français
InicioSeguridad Web

Suponiendo que tienes una plantilla o fragmento HTML de la forma:

<b>Error:  Tu petición '%(query)s' no produjo ningun resultado.</b>

Si el atacante es capaz de hacer que la variable contenga, por ejemplo:

<script>evil_script()</script>

Entonces el fragmento HTML quedaría como:

<b>Error:  Tu petición '<script>evil_script()</script>' no arrojó ningún resultado.</b>

y el código maligno sería ejecutado en el navegador y podría por ejemplo robar las cookies de autentificación del usuario.

Solución

Cualquier cadena que sea insertada dentro de una página debe tener los siguientes carácteres reemplazados con las entidades HTML/SGML correspondientes:

Razonando

El caracter "menos que" y el "mas que" necesitan ser escapados pues estos delimitan las etiquetas HTML, y si no escapamos esas etiquetas (incluyendo las etiquetas <script>) podrían ser interpretadas por el navegador.

Si el ampersand tampoco es escapado en este contexto, este podría no ser un problema de seguridad, pero podría resultar en un error de renderización pues el navegador puede interpretar el ampersand como el inicio de una entidad y no mostrarle (Nota: Hay que saber que las Entidades JavaScript no trabajan fuera de los atributos.)

No es estrictamente necesario escapar las comillas en este contexto, sin embargo será necesario en otros contextos, y es mucho más fácil usar las mismas funciones de escape en todas partes.

Para leer más


Sign in to add a comment