La intención de la inyección MySQL es apoderarse de la base de datos del sitio web y robar información. Muchos desarrolladores de sitios web han utilizado bases de datos comunes de código abierto, como MySQL, para almacenar información importante como contraseñas, información personal e información administrativa.
MySQL es popular porque se utiliza con el lenguaje de programación del lado del servidor más popular, PHP. Además, PHP es el lenguaje principal del servidor Linux-Apache que domina Internet. Por lo tanto, esto significa que los piratas informáticos pueden explotar PHP fácilmente como el software espía de Windows.
Los piratas informáticos introducen grandes cantidades de código malicioso en un formulario web no seguro (a través de menús desplegables, cuadros de búsqueda, formularios de contacto, formularios de consulta y casillas de verificación).
El código malicioso se enviará a la base de datos MySQL y luego se "inyectará". Para ver este proceso, primero considere la siguiente instrucción básica de consulta SELECT de MySQL:
SELECT * FROM xmen WHERE nombre de usuario = 'wolverine'
Esta consulta le pedirá a la base de datos con la tabla "xmen" que devuelva un determinado dato con el nombre de usuario "wolverine". en MySQL.
En el formulario web, el usuario ingresará Wolverine y estos datos se pasarán a la consulta MySQL.
Si la entrada no es válida, existen otras formas para que los piratas informáticos tomen el control de la base de datos, como configurar el nombre de usuario:
' O ''=''
Podría pensar que es seguro usar la sintaxis normal de PHP y MySQL para realizar la entrada, porque Cada vez que alguien ingresa un código malicioso, recibirá un mensaje de "consulta no válida", pero ese no es el caso. Los piratas informáticos son inteligentes y cualquier agujero de seguridad no es fácil de corregir porque implica limpiar la base de datos y restablecer los privilegios administrativos.
Dos malentendidos comunes sobre los ataques de inyección de MySQL son los siguientes:
1. Los administradores de red creen que las inyecciones maliciosas se pueden limpiar con software antivirus o antispyware. El hecho es que este tipo de infección aprovecha las debilidades de la base de datos MySQL. No puede eliminarse simplemente mediante ningún programa antivirus o antispyware.
2. La inyección de MySQL se produce al copiar un archivo infectado desde otro servidor o fuente externa. Este no es el caso. Este tipo de infección ocurre cuando alguien ingresa un código malicioso en un formulario desprotegido en un sitio web y luego accede a la base de datos. La inyección de MySQL se puede limpiar eliminando el script malicioso, en lugar de utilizar un programa antivirus.
El proceso de validación de las entradas del usuario
realiza una copia de seguridad de una base de datos limpia y la coloca fuera del servidor. Exporte un conjunto de tablas MySQL y guárdelas en el escritorio.
Luego vaya al servidor y primero desactive temporalmente la entrada del formulario. Esto significa que el formulario no puede procesar los datos y el sitio web se cierra.
Luego comience el proceso de limpieza. Primero, en su servidor, limpie las inyecciones de MySQL desordenadas restantes. Cambie todas las contraseñas de bases de datos, FTP y sitios web.
En el peor de los casos, si llega tarde a la limpieza, puede volver a verificar si hay programas ocultos ejecutándose en su servidor. Estos programas ocultos son troyanos instalados por piratas informáticos. Elimínelo por completo y cambie todos los permisos de FTP. Escanee el servidor en busca de todos los troyanos y malware.
Cuando modifica el programa de script PHP, se procesarán los datos del formulario. Una buena forma de evitar la inyección de MySQL es ni siquiera confiar en los datos del usuario. La validación de la entrada del usuario es muy importante para evitar la inyección de MySQL.
Para diseñar un filtro para filtrar la entrada del usuario, aquí hay algunos consejos:
1. La entrada al formulario son números. Puedes verificar que es un número probando que sea igual o mayor que 0,001 (suponiendo que no aceptes un cero).
2. Si es una dirección de correo electrónico. Verifique si consta de combinaciones de caracteres permitidas, como "@", AZ, az o algunos números.
3. Si es el nombre de una persona o nombre de usuario. Se puede verificar si contiene caracteres ilegales, como y y *, que son caracteres maliciosos que pueden usarse para inyección SQL.
Validación de la entrada numérica
El siguiente script verifica que se haya ingresado un número válido desde 0,001 hasta el infinito. Cabe mencionar que en un programa PHP, incluso puedes permitir el uso de números dentro de un rango determinado. Utilice este script de validación para asegurarse de que solo se ingrese un número en el formulario.
Supongamos que tiene tres variables numéricas en su programa y necesita validarlas, llamémoslas num1, num2 y num3:
//Validar entrada numérica;
if($_POST['num1'] >= 0.001 && $_POST['num2'] >= 0.001 && $_POST['num3'] >= 0.001){
}else{
}
?>
Y la condición se puede ampliar para dar cabida a más de tres números. Entonces, si tiene 10, solo necesitará expandir la declaración AND.
Esto se puede utilizar para validar un formulario que solo acepta números, como cantidades de contrato, números de licencia, números de teléfono, etc.
Validar entradas de texto y direcciones de correo electrónico
Se puede utilizar lo siguiente para validar entradas de formularios, como nombres de usuario, nombres y direcciones de correo electrónico:
//Validar entradas de texto
if (! preg_match('/^[-az.-@,'s]*$/i',$_POST['name'])){
}
elseif ($empty==0){
}else{
}
?>
Una ventaja de este script de validación es que no acepta entradas en blanco. Algunos usuarios malintencionados también manipulan bases de datos mediante entradas en blanco. Usando el script anterior, valide solo una variable literal, "$nombre". Esto significa que si tiene tres variables de texto, puede configurar un script de validación para cada variable para garantizar que cada variable pase la revisión antes de ingresar a la base de datos.