HtmlEntities SobrePasar

Iniciado por Garopa, 22 Noviembre 2009, 20:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Garopa

Hola amigos de elhacker.net! Tengo 1 preguntita de seguridad que se me vinieron a la mente.


Estaba viendo el post de sobrepasar htmlentities, y me vino la duda de un par de cosas.

http://foro.elhacker.net/printpage.html;topic=251657.0



header('Content-Type: text/html; charset=UTF-7'); 
$texto = htmlentities($texto,ENT_QUOTES);     
$texto = "+ADw-script+AD4-alert(/XSS/)+ADsAPA-/script+AD4-";
echo $texto;


Si uno hace interpretar este script, devuelve un alert diciendo XSS.

Entonces pienso bueno en vez de UTF-7, pongo UTF-8 y listo. Solucionado!.

Pero agarre el programa Achilles ( Man in The middle) y lo que hize fue interceptar cuando estaba recibiendo el header que tenia el UTF-8 ( como content type) Se lo cambio a UTF-7, y ahi saltaba el XSS.

Ahora mi pregunta es como evito que me cambien la codificacion con un man in the iddle. Porque si ese mensaje se guarda en una base de datos despues cuando le de un echo a ese mensaje me va tirar el alert.

Hay alguna funcion en php que me diga la codificacion que se este usando en la web?
Cosa que si detecto que alguien modifico el UTF-7, le meto un die; ahi no mas.



Desde ya muchas gracias a todos :).












WHK

El php se ejecuta en el servidor y no en el cliente asi que cuando el servidor devuelva la ejecución del php todavía no habrá actuado el MITM, por lo tanto desde php lo veo dificil.

Ahora si alguien te hace MITM no va a necesitar cambiarte la codificación para lanzarte ataques, basta con insertar código ejecutable en el cliente directamente.

[Servidor+PHP] <- [MITM] <- [Mi explorador]
[Servidor+PHP] -> [MITM] -> [Mi explorador]

Garopa

#2
Si yo pongo un sistema como fotolog y yo quiero que no haya HTML en ese comentario solo con

$texto = htmlentities($texto,ENT_QUOTES);    

estaria? o faltaria algo mas por seguridad?

Por que siempre hay alguno que te quiere inyectar html con &lt; y eso?

Ustedes con

$texto = htmlentities($texto,ENT_QUOTES);   

esta bien ya?

WHK

si, con htmlentities debería bastar pero para mayor seguridad siempre utilizo htmlspecialchars ya que esa función fue diseñada por php para escapar carácteres html como los que tu dices, aunque de todas formas htmlentities hace muy similar.

http://cl.php.net/htmlentities
http://cl.php.net/htmlspecialchars

Hacen practicamente lo mismo solo que cambian los tipos de codificaciones. Yo en lo personal prefiero htmlspecialchars y si usas cualquiera de los dos siempre debe ir con el ENT_QUOTES porque si no se lo pones entonces podrán insertar comillas simples y pueden inyectarse en código javascript o para escapar de tags que estén declarados con comillas simples en ves de dobles..

Saludos.