Curso Acelerado de Seguridad - Episodio 3 - XSS

Este artículo fue escrito por Damien Metzger, y publicado por primera vez en el blog de PrestaShop, el 28 de septiembre de 2011.

Sería erróneo suponer que usted necesita el acceso al código de un sitio web para poder hackearlo. De hecho, incluso en el nivel de visualización de HTML, usted necesita proteger todos los datos que aparecen.

Un defecto de XSS consiste en la explotación de la interpretación del navegador de HTML / Javascript cuando se muestran datos Si muestra datos no protegidos en la página- es decir, sin cuidar para convertir los caracteres que están siendo interpretados - el navegador será capaz de interpretar las variables que son mostradas como HTML o Javascript.

Ejemplo.

Página :

<html> <body> No results were found for the keyword $keyword.</body> </html>

Explotación : Sólo tiene que ingresar la cadena de caracteres siguiente como una palabra clave:

<script type="text/javascript">alert('kikoo');</script>

Resultado: Una alerta "kikoo" aparecerá en la página.

Por supuesto, que se puede hacer mucho más que agregar una alerta en Javascript, también se puede redirigir al usuario a otra página web, robar las cookies y mucho más.

¿Cómo puede protegerse?

Esto no es muy complicado: todo lo que aparece en las páginas HTML debe ser protegido con una función como htmlspecialchars() o htmlentities(). En algunos casos, también puede utilizar funciones adicionales, tales como strip_tags() la cual elimina todas las etiquetas HTML de una cadena de caracteres o unas simples addslashes() si está trabajando en Javascript.

La verdadera dificultad no pasa por protegerse a sí mismo, sino recordar hacerlo siempre. Las principales razones para olvidarse de esto son:

  • La cantidad de variables involucradas. Una enorme cantidad de variables son mostradas a los usuarios y todo lo que necesita es un "bien situada" para permitir a hackers, explotar un defecto de XSS. En el mismo sentido, cuando se diseña el sitio web, usted necesita pensar acerca del momento en el que va a proteger a estas variables. ¿Directamente en la plantilla para lograr que se realize desde el principio? Esto es bastante ineficaz e ineficiente. ¿En las comprobaciones? Es fácil olvidarse de comprobarlas todas. ¿Al observar? Si se tiene en cuenta que la seguridad es el trabajo de un desarrollador, entonces tal vez. Y, por supuesto, hacerlo en varios niveles es impensable, ya que no puede acumular estas funciones de protección o terminará con un resultado ilegible. No existe ninguna solución rápida para este problema: cada página debe ser verificada sistemáticamente ya que todas están involucradas en esto.

  • El tipo de variables que intervienen. ¡XSS no afecta sólo a datos POST o GET! Por ejemplo, es muy fácil falsificar un referente para explotar un botón "Anterior" sin protección. Su base de datos tal vez no sea tan segura como parece: la seguridad puede verse comprometida por un ataque deliberado o porque por error usted han utilizado caracteres interpretados (esto no será un XSS, pero la muestra será quebrantada). En resumen: ningúnos datos deben ser dejados de lado, así como no hay datos totalmente fiables.

Last updated