¿Es posible que los usuarios inserten caracteres prohibidos en sitios con htmlentities o mysqlescapestring?

4

Por lo tanto, en mi breve investigación sobre la seguridad de PHP, me han guiado hacia dos funciones importantes para eliminar los caracteres prohibidos de los formularios. Uno es "htmlentities" y el otro es "mysql_escape_string". Lo que me pregunto es si hay una forma común en que los piratas informáticos inserten caracteres maliciosos prohibidos en los formularios a pesar de las funciones. Sospecho que esto es posible, ya que esta es una técnica de seguridad comúnmente empleada. ¿Se necesita una capa extra de seguridad?

NB: entiendo que mysql_escape_string puede quedar en desuso pronto.

    
pregunta baordog 31.05.2013 - 23:36
fuente

1 respuesta

3

Si bien mysql_escape_string() es un método correcto para prevenir la inyección de SQL, las consultas parametrizadas son un enfoque mucho mejor. mysql_escape_string() todavía no es perfecto; por ejemplo, lo siguiente es vulnerable a la inyección de SQL:

$q="select * from user where uid=".mysql_real_escape_string($_GET[uid]);

El PoC es simple:

http://localhost/vuln.php?uid=sleep(30)

¡Usa consultas parametrizadas!

htmlentities() , o htmlspecialchars() evitará algunos tipos de XSS. No evitarán que XSS en eventos DOM . Este método no evitará inyectar eventos, por ejemplo: value='junk' onclick=alert(/xss/) . htmlspecialchars($var,ENT_QUOTES) es un poco mejor, porque evita la inyección de eventos DOM, pero aún puedes secuestrar un evento (consulta la publicación del blog "Es un evento DOM").

Entonces estas dos funciones mitigarán parcialmente dos vulnerabilidades de un par de miles . Para llamar a algunos de los grandes infractores que no serán mitigados por mysql_real_escape_string() o htmlentites() tenemos: Traversal del directorio (y LFI / RFI para PHP), inyección de LDAP, inyección de XPATH, división de respuesta HTTP, inyección de archivo de registro ... . y la lista continúa.

La entrada de escape no tiene nada que ver con la eliminación de "caracteres prohibidos". Se trata de convertir caracteres de escape (o secuencias de caracteres) en su " character literal " de modo que los datos controlados por el atacante todavía se interpretan como datos, y no como código ejecutable.

    
respondido por el rook 01.06.2013 - 00:05
fuente

Lea otras preguntas en las etiquetas