Tutorial sobre el uso de la inyección MySQL

Escrito por jason gabriel | Traducido por xochitl gutierrez cervantes
  • Comparte
  • Twittea
  • Comparte
  • Pin
  • E-mail
Tutorial sobre el uso de la inyección MySQL
Cuando se habla de inyección se refiere al acto de insertar información MySQL a una base de datos. (injection image by sasha from Fotolia.com)

Una inyección MySQL se refiere al acto de insertar información MySQL a una base de datos sin el conocimiento del propietario de la base de datos. En general se realiza mediante la explotación de los campos de entrada del usuario que no están protegidos adecuadamente. En lugar de proporcionar la entrada real que el propietario de la base de datos ha pedido, el usuario inyecta una información MySQL que cambia el comportamiento de la consulta y da al usuario que ha inyectado la información la capacidad de manipular la base de datos.

Otras personas están leyendo

Inyecciones MySQL

La manera más fácil de entender y aprender lo que realmente hace la inyección MySQL es analizar un ejemplo. Una de las maneras más populares de inyectar MySQL es evitando los controles de inicio de sesión en los sitios web. He aquí un ejemplo de un sitio web que utiliza el siguiente formulario para autenticar al usuario: form name=\"userlogin\" action=\"userlogin.php\" method=\"post\" Login: <input type=\"text\" name=\"username\" Lozinka: <input type=\"text\" name=\"password\" input type=\"submit\" //form Después de que envías los datos a la página userlogin.php, se recibe y se ejecuta una consulta a la base de datos para comprobar el nivel de acceso que tienes como usuario y si has entrado tu nombre de usuario y contraseña correctos. $username = $_POST['username'] GO $password= $_POST['password'] GO $query = \"SELECT username, password FROM users WHERE username = '$username' and password = '$password' \" GO />Este tipo de formulario de acceso está totalmente abierto a la explotación y ataques de inyección MySQL. Para acceder a la página web cualquier usuario puede insertar el siguiente código: 'OR 1=1-- for username and 'OR 1=1 for password. Query will now look like this: $query = \"SELECT username, password FROM users WHERE username = '' OR 1=1--' and password = '' OR 1=1\" GO Esta consulta seleccionará el nombre de usuario y la contraseña de usuarios o contraseñas que no existen (“part) 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 del apóstrofe para hacer que MySQL ignore el apóstrofe que ya es redundante. Esto es sólo un tipo de ataque que puede usar la inyección MySQL. Otra variante de este ataque es lograr acceder a más información de la que se le permite a cada usuario. Ahora observa este ejemplo que el propietario de la base está utilizando en la siguiente consulta para obtener los datos que se mostrarán en la página de información de la cuenta de usuario. $query = \"SELECT * FROM users WHERE username = '$name'\" GO Si este tipo de consulta no está protegida contra el usuario malicioso, entonces, él será capaz de introducir 'OR 1=1-- to bypass username check. $query = \"SELECT * FROM users WHERE username = ''OR 1=1-- '\" GO Esta consulta ahora no seleccionará sólo los datos de los usuarios, sino los datos de todos los usuarios en la tabla que se denominen "usuarios".

Protección en contra de inyecciones MySQL

Hay muchas formas de proteger contra las inyecciones MySQL. De hecho, éstas son amenazas sólo si el desarrollador la ha ignorado y no protege su código. La manera más fácil de protegerse contra inyecciones en la combinación PHP y MySQL es utilizar la función PHP: “mysql_real_escape_string”. Regresando al primer ejemplo $username = $_POST['username'] GO $password= $_POST['password'] GO $query = \"SELECT username, password FROM users WHERE username = '$username' and password = '$password' \" GO<br / / Para protegerte contra el uso de inyecciones MySQL directas en las entradas del usuario debe haber una filtración a través de "mysql_real_escape_string". Función "mysql_real_escape_string"que deja escapar todos los caracteres especiales MySQL eliminando la posibilidad de cambiar el comportamiento de nuestra consulta. $username =mysql_real_escape_string($_POST['username']) $password= mysql_real_escape_string($_POST['password']) GO $query = \"SELECT username, password FROM users WHERE username = '$username' and password = '$password' \" GO.

No dejes de ver

Filtrar por:
  • Mostrar todos
  • Artículos
  • Galerías de fotos
  • Videos
Ordenar:
  • Más relevante
  • Más popular
  • Más reciente

No se encuentran artículos disponibles

No se encuentran slideshows disponibles

No se encuentran videos disponibles