Hellsparty Planet
Planeta Seguro
RSS

Subscribete por RSS.

O por

htmlentities() esta mal diseñado

November 26th, 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