Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/01/2010, 08:38
paynalton
 
Fecha de Ingreso: enero-2010
Mensajes: 152
Antigüedad: 14 años, 4 meses
Puntos: 5
Respuesta: Seguridad base de datos con mysql_real_escape_string

Bueno, antes que nada te recomiendo leer esto:

http://code.google.com/p/doctype/wiki/EsArticleIntroductionToXSS


mysql_real_escape_string, como te dice en el manual, te escapa caracteres especiales tomando en cuenta la codificación de la base de datos.

pero por sí mismo no funciona, segun el código que pusiste, imaginate que yo meto desde mi url esto:

archivo.php?id=(delete from pueblos where id>0).

Entonces, la query que pasaría sería:

Código MySQL:
Ver original
  1. select * from pueblos where cod_id=(delete from pueblos where id>0)

con lo cual yo podría borrar todos los registros de tu tabla.

Entonces, antes que nada debes tener la costumbre de incluir comillas en tus consultas así:

Código PHP:
Ver original
  1. $todo=mysql_fetch_array(mysql_query("select * from `pueblos` where `cod_id`='".$n."'"));

Así mi código maligno quedará como texto y tu tabla estará segura.

pero digamos que yo soy mas listo y escribo esto en la URL:

archivo.php?id=43' and id=(delete from pueblos where id>0) and nombre='sdf.

Y con eso ahora la query quedara como:

Código MySQL:
Ver original
  1. select * from `pueblos` where `cod_id`='43' and id=(delete from pueblos where id>0) and nombre='sdf'

Y nuevamente estás en peligro, allí es donde entra mysql_real_escape_string():

Código PHP:
Ver original
  1. $todo=mysql_fetch_array(mysql_query("select * from `pueblos` where `cod_id`='".mysql_real_escape_string($n,$link)."'"));

tras lo cual la consulta quedaría como:

Código MySQL:
Ver original
  1. select * from `pueblos` where `cod_id`='43\' and id=(delete from pueblos where id>0) and nombre=\'sdf'

Y de nuevo has evitado mi intento de hacerte pasar un muy mal día.