ProgramacionWeb - Ayuda al webmaster
No has iniciado sesión
Conectar al sistema | Registrar usuario
Categorías Articulo
 
7 votos
Evitar la inyección SQL
 
 
La inyección SQL consiste en la modificación de las consultas a nuestra base de datos a partir de los parametros pasados por URL al script en PHP.

ArribaTabla de contenido

Arriba¿En que consiste?

Vamos a ver un ejemplo de lo que es la inyección, imaginemos que para validar el acceso de un usuario registrado utilizamos la siguiente consulta SQL:
 
000 
001 
002 
003 
<? 
$sql 
"SELECT * FROM usr WHERE id = '".$id
$sql.= "' AND pwd = '".$pwd."'"
?>
 
Cuando tengamos unos valores para el nombre de usuario (id) y la contraseña del usuario (pwd) tendremos una consulta normal a la base de datos que nos devolverá los datos del usuario si la contraseña es correcta:

SELECT * FROM usr WHERE id = 'root' AND pwd = '4358'

Pero vamos a ver que pasaria si intentaramos modificar la consulta poniendo cómo contraseña ' OR '' = '

SELECT * FROM usr WHERE id = 'root' AND pwd = '' OR '' = ''

En este caso, como '' siempre es igual a '', habremos modificado la consulta para que nos devuelva siempre los datos del usuario aunque la contraseña sea incorrecta, y el visitante malintencionado se podrá conectar como cualquier usuario.

Pero esto es solo un ejemplo, asimismo, el visitante malintencionado podra conseguir contraseñas, borrar, anñadir y modificar datos de nuestra base de datos... por eso es importanto que nos aseguremos que nuestro sitio es seguro en este aspecto.

Arriba¿Estoy afectado?

Según la configuración de tu servidor es posible que no te encuentres afectado por este tipo de problemas, pero de todos modos es mejor asegurarse, vamos a ver si nuestro servidor toma la precaución de cambiar las comillas pasadas en las variables ejecutando este código:
 
prueba.php
000 
001 
002 
003 
004 
005 
006 
007 
008 
<? 
if(!isset($_GET["inyeccion"])){ 
 
header("location: ?inyeccion='")
} else { 
 echo 
'Tu servidor '
 if(
$_GET["inyeccion"] != "'")echo 'no '
 echo 
'tiene problemas de inyección'
} 
?>
 
Segun el mensaje que nos muestre deberemos o no preocuparnos
 

Páginas: 1 2

 
 
Comentarios
13/03/06 Comentario 495
Hola,
para evitar el tema de las comillas simples ', no valdría con utilizar addslashes()

<?
// Evitamos la inyeccion SQL

// Modificamos las variables pasadas por URL
foreach($_GET as $variable=>$valor){
$_GET[$variable] = addslashes($valor);
}
// Modificamos las variables de formularios
foreach($_POST as $variable=>$valor){
$_POST[$variable] = addslashes($valor);
}
?>
 
Resolver dudas
Si tienes problemas o dudas con el contenido del artículo no dudes a preguntar en los foros de PHP de Programación Web indicando el artículo al que te refieres.