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 :
Vaya, ese tipo de cosas es necesario saberlas para no relajarse y sobre todo apreciar la gravedad de la vulnerabilidad.
también podría usarse la función addslashes(), no es cierto?
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..
Publicar un comentario