MariaDB - Protección contra inyección SQL
El simple hecho de aceptar la entrada del usuario abre la puerta a las vulnerabilidades. El problema surge principalmente de la gestión lógica de los datos, pero afortunadamente, es bastante fácil evitar estos defectos importantes.
Las oportunidades para la inyección de SQL generalmente ocurren cuando los usuarios ingresan datos como un nombre y la lógica del código no analiza esta entrada. El Código, en cambio, permite a un atacante insertar una declaración MariaDB, que se ejecutará en la base de datos.
Siempre considere los datos ingresados por los usuarios, sospechosos y que necesitan una validación sólida antes de cualquier procesamiento. Realice esta validación mediante la coincidencia de patrones. Por ejemplo, si la entrada esperada es un nombre de usuario, restrinja los caracteres ingresados a caracteres alfanuméricos y guiones bajos, y a una cierta longitud. Revise un ejemplo que se da a continuación:
if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) {
$result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]");
} else {
echo "Invalid username";
}
Además, utilice el operador REGEXP y las cláusulas LIKE para crear restricciones de entrada.
Considere todos los tipos de control explícito necesario de la entrada, como:
Controla los caracteres de escape utilizados.
Controle los tipos de datos apropiados específicos para la entrada. Limite la entrada al tipo y tamaño de datos necesarios.
Controle la sintaxis de los datos ingresados. No permita nada fuera del patrón necesario.
Controle los términos permitidos. Lista negra de palabras clave SQL.
Puede que no conozca los peligros de los ataques por inyección, o puede que los considere insignificantes, pero encabezan la lista de preocupaciones de seguridad. Además, considere el efecto de estas dos entradas:
1=1
-or-
*
El código que permite ingresar cualquiera de ellos junto con el comando correcto puede resultar en revelar todos los datos del usuario en la base de datos o eliminar todos los datos en la base de datos, y ninguna inyección es particularmente inteligente. En algunos casos, los atacantes ni siquiera dedican tiempo a examinar los agujeros; realizan ataques ciegos con una entrada simple.
Además, considere las herramientas de expresión regular y coincidencia de patrones que proporciona cualquier lenguaje de programación / scripting emparejado con MariaDB, que brindan más control y, a veces, mejor control.