Foros del Web » Programando para Internet » PHP »

Una inyección externa de MySQL, como se hace y como se previene?

Estas en el tema de Una inyección externa de MySQL, como se hace y como se previene? en el foro de PHP en Foros del Web. Eso, para estar prevenidos, digamos que se puede hacer de manera externa? o dentro de un formulario del sitio? o como se logra....
  #1 (permalink)  
Antiguo 25/04/2005, 17:44
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 8 meses
Puntos: 9
Una inyección externa de MySQL, como se hace y como se previene?

Eso, para estar prevenidos, digamos que se puede hacer de manera externa? o dentro de un formulario del sitio? o como se logra.
  #2 (permalink)  
Antiguo 26/04/2005, 06:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Algunas técnicas son:

1) Escapar todo dato que entre directo a tus sentencias SQL usando mysql_escape_string() (para PHP 4.3.0 en adelante .. versiones inferiores tendrías que usar addslashes() en función del estado de magic_quote_gpc() que lo puedes obtener con otra función).

ejemplo:
$sql="SELECT * FROM tabla WHERE campo='".mysql_escape_string($_POST['dato'])."'";

Esto por si no usas "magic_quote_gpc" a ON (en tu PHP.ini) que por defecto ya "escapa" todo caracter potencialmente "peligroso".

2) Usar comillas (aunque sean de tipo numérico) cuando llames a variables externas PHP.

3) Filtrar tus datos externos: Si esperas un "numero" .. validalo como tal (is_numeric()) .. si esperas una cadena .. lo mismo .. si es alfanumérico .. intenta identificar si hay rangos o valores predefinidos .. El objetivo es llegar a tu sentencia "SQL" con tu "variable" lo más "limpia" y filtrada posible.

4) Usar usuarios de tu BD con los privilegios justos a lo que haga tu aplicación. Es decir .. no usar un "root" para hacer taréas simples (por parte de tus scripts de tus aplicaciones) como un simple "SELECT" o un "INSERT" .. "UPDATE" y DELETE que suele ser lo típico .. Ajusta los permisos y privilegios de ese usuario a usar (valga la rebundancia) y sólo dale esos permisos para hacer esas acciones .. nada más.

Si usas google por los términos: injection sql ... veras muchos ducumentos que hablan del tema

por ejemplo .. el mismisimo manual oficial de PHP habla del tema:
http://www.php.net/manual/en/securit...-injection.php

Otro detalle .. si te fijas .. esto del "SQL Injection" es común a toda Base de datos .. cada una con sus detalles. Te lo comento por si ves por ahí tutoriales o artículos que se enfocan a "MS SQL Server" .. las técnicas para "cuidarse" suelen ser aplicables a Mysql también.

Un saludo,

Última edición por Cluster; 26/04/2005 a las 06:51
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:45.