Tecnología

Inicio

Tutorial de inyección MySQL

MySQL inyección es acto de insertar declaración MySQL en una base de datos sin el conocimiento del propietario de la base de datos. Por lo general, se realiza mediante la explotación de campos de entrada de los usuarios que no estén protegidos adecuadamente. En lugar de proporcionar la entrada real de que el propietario de la base de datos ha pedido, el usuario inyecta una declaración de MySQL que cambia el comportamiento de la consulta para dar al usuario la capacidad de manipular la inyección de la base de datos.

Las inyecciones de MySQL

La forma más fácil de entender y aprender lo que realmente hace la inyección de MySQL
es tomar un vistazo a un ejemplo. Una de las formas más populares de utilizar MySQL
inyecciones es evitar los controles de inicio de sesión en sitios web. He aquí un ejemplo de una
página web que está utilizando el siguiente formulario para autenticar al usuario:

<Form name = \ acción "userlogin \" = \ método "userlogin.php \" = \ "post \">
Entrada: <input type = \ "text \" name = \ "nombre de usuario \">
Lozinka: <input type = \ "text \" name = \ "password \">
<Input type = \ "submit \">
</ Form>

Después de pulsar el botón Enviar datos introducidos se envía luego a la userlogin.php página que recibe y ejecuta a través de una consulta en la base de datos para comprobar el nivel de acceso de los usuarios tiene y si ha entrado en el nombre de usuario y la contraseña correctos.

<?
$ Usuario = $ _POST [ 'nombre de usuario']
IR
$ Password = $ _POST [ 'password']
IR
$ Consulta = \ "SELECT nombre de usuario, contraseña FROM usuarios WHERE nombre de usuario =
'$ Nombre de usuario "y la contraseña =' $ password '\"
IR
?>

Este tipo de formulario de acceso está abierto a la explotación por los ataques de inyección de MySQL. Para acceder a la página web de cualquier usuario puede insertar código siguiente: 'OR 1 = 1-- el nombre de usuario y' OR 1 = 1 para contraseña.

Consulta ahora se verá así:
$ Consulta = \ "SELECT nombre de usuario, contraseña FROM usuarios WHERE nombre = '' O
1 = 1-- 'y la contraseña =' 'OR 1 = 1 \ "
IR

Esta consulta seleccionará nombre de usuario y la contraseña de los usuarios donde no existen nombres de usuario o contraseña ( '' parte) o si uno es igual a uno. Como uno es igual a uno en todos los casos la seguridad de la base de datos se ve comprometida. Se añadieron dos guiones antes de apóstrofo para hacer caso omiso de MySQL apóstrofe que es redundante. Este es sólo un tipo de ataque mediante la inyección de MySQL. Otra variante de este ataque es conseguir
el acceso a más información que el usuario tiene permitido.

Ahora mira a un ejemplo en el propietario de la base está utilizando la consulta siguiente
para obtener los datos para su visualización en cuenta de usuario de las páginas de información.

$ Consulta = \ "SELECT * FROM usuarios WHERE nombre = '$ nombre' \"
IR

Si este tipo de consulta no está protegido usuario malicioso es capaz de introducir
'OR 1 = 1-- para eludir cheque nombre de usuario.
$ Consulta = \ "SELECT * FROM usuarios WHERE nombre = '' OR 1 = 1-- '\"
IR
Esta consulta ahora no va a seleccionar sólo los datos del usuario, pero los datos de todos los usuarios en "usuarios" de mesa.

Protección contra Inyecciones de MySQL

Hay muchas maneras de protegerse contra las inyecciones de MySQL. De hecho inyecciones de MySQL son amenazas sólo si el desarrollador ha ignorado la amenaza y han fallado en la protección de su código. La forma más fácil de proteger contra las inyecciones en PHP y MySQL combinación es utilizar la función de PHP: "mysql_real_escape_string".

Volviendo al primer ejemplo.
<?
$ Usuario = $ _POST [ 'nombre de usuario']
IR
$ Password = $ _POST [ 'password']
IR
$ Consulta = \ "SELECT nombre de usuario, contraseña FROM usuarios WHERE nombre de usuario =
'$ Nombre de usuario "y la contraseña =' $ password '\"
IR
?>

Para proteger contra las inyecciones de MySQL usos directos de las entradas del usuario deben estar
filtró a través de "mysql_real_escape_string". Función "mysql_real_escape_string" escapará todos los caracteres especiales de MySQL eliminar la posibilidad de cambiar el comportamiento de nuestra consulta.

<?
$ Usuario = mysql_real_escape_string ($ _POST [ 'nombre de usuario'])
IR
$ Password = mysql_real_escape_string ($ _POST [ 'password'])
IR
$ Consulta = \ "SELECT nombre de usuario, contraseña FROM usuarios WHERE nombre de usuario =
'$ Nombre de usuario "y la contraseña =' $ password '\"
IR
?>