lunes, 26 de noviembre de 2007

Cuando alguien usa htmlentities(), lo he visto una y otra vez, espera que la filtracion de todas las variables de tipo XSS. Esto no es cierto, por supuesto, ya que la función requiere un segundo parámetro ENT_QUOTES que reemplaza a los caracteres de cita. Algunos desarrolladores ni siquiera son conscientes de que las comillas pueden llevar a XSS inyección.

Esto me lleva a mi punto, por defecto debería tener htmlentities() filtros de cotizaciones y si el desarrollador desea desactivar esta funcionalidad a su vez pueden usar el segundo parámetro.

Aquí está el código de ejemplo para toda persona utilizando htmlenitites:

<?php
htmlentities($variable, ENT_QUOTES);
?>


En el pasado he hecho este error también por supuesto de que la función de las comillas se toma en cuenta, aunque ahora no he aprendido:)

En lugar de usar htmlentities() usar htmlspecialchars() ya que se concentra en los caracteres especiales (<,>, &, ", '), por defecto, aunque se le escapan comillas dobles, pero no simples.

Ahora, acerca de la amenaza del tipo XSS, y no escapar comillas sencillas lo que realmente importa, a condición de que:
- Que la producción de contenido en un elemento html (como PCDATA). Individual o dobles no necesitan ser cubiertas entonces.
- Que la salida de contenido en el valor de un atributo, delimitado por comillas dobles. Luego sólo necesita protegerse de comillas dobles, que lo hace por defecto.

Posible Solucion:

<?php
$input = ‘\-\mo\z\-b\i\nd\in\g:\url(//business\i\nfo.co.uk\/labs\/xbl\/xbl\.xml\#xss)’;
$input = htmlspecialchars($input, ENT_QUOTES);
?>
<div style=”<?php echo $input?>”></div>


hilo: The Spanner

3 comentarios :

  1. Anónimo dijo...

    Vaya, ese tipo de cosas es necesario saberlas para no relajarse y sobre todo apreciar la gravedad de la vulnerabilidad.

  2. Alex dijo...

    también podría usarse la función addslashes(), no es cierto?

  3. Miguel dijo...

    Cierto Alex, pero esa funcion retira las comillas(\'), el problema seria al volver a utilizar la misma cadena retirando las barras invertidas y dejando las comillas tal como estaban.

    stripslashes() furulando... x)

    Un saludo..