Press ESC to close

Cómo proteger sus bases de datos de las inyecciones SQL

SQL (Structured Query Language) es un lenguaje de programación popular para gestionar los datos guardados en bases de datos relacionales. Sin embargo, se pueden incumplir las bases de datos cuando un atacante añade sentencias SQL que intentan corromper, suprimir, extraer o eliminar los datos de las bases de datos.

Con el aumento actual de los casos de inyección SQL, es fundamental aprender a proteger sus bases de datos para alcanzar sus objetivos de seguridad cibernética. También puede mejorar sus habilidades para protegerse de este tipo de ataque observando como lo hacen profesionales.

Por ejemplo, Darren Rainey, Que es del Reino Unido y tiene más de cuatro años de experiencia en seguridad cibernética, suele transmitir las medidas que utiliza para proteger los sistemas de diversos tipos de ataques, incluida la inyección SQL.

Como se produce una inyección SQL?

Una inyección SQL se produce cuando un pirata informático «inyecta» una sentencia SQL malintencionada en otra sentencia, lo que provoca que la base de datos lleve a cabo acciones no deseadas. Este tipo de inyecciones suelen afectar a las aplicaciones que formulan sentencias SQL a partir de acciones del usuario, como los valores que los usuarios introducen en el formulario de un sitio web.

El tipo principal de ataques de inyección SQL son los ataques basados ​​en errores. Se producen cuando los atacantes comprometen las entradas no sanitzades.

Si un desarrollador no sanea las entradas eliminando caracteres innecesarios de los datos introducidos, un atacante puede insertar valores incorrectos y causar daños a la base de datos.

Por ejemplo, aquí hay el código PHP de un formulario web de inicio de sesión que tiene campos de usuario y contraseña.

? php
$ My_username = $ _ POST[‘username’];
$ My_password = $ _ POST[‘password’];
$ My_sql_query = «SELECT * FROM users WHERE nombre de usuario =» «. $ My_username.» ‘AND user_password = «». $ My_password » ‘;»;
?>

El orden anterior se enviaría a un servidor de bases de datos para determinar la correspondencia con los datos almacenados, antes de permitir o denegar el acceso a un usuario.

Digamos que un usuario introduce «ordenador» como nombre de usuario y «comp123» como contraseña, daría lugar a la orden siguiente.

$ My_sql_query = «SELECT * FROM users WHERE username =» «. $ Computer.» ‘AND user_password = «». $ Comp123 » ‘; «;

Sin embargo, el código anterior es vulnerable a los ataques. Si un atacante inserta ‘o’ a ‘=’ a ‘o’ en el campo de la contraseña, entonces la variable $ my_password tendrá el valor oro ‘a’ = ‘a’ oro ‘.

En este caso, el orden resultante tendrá el aspecto siguiente, que normalmente conduce a un conjunto de datos no vacío.

$ My_sql_query = «SELECT * FROM users WHERE username =» «. $ Computer.» ‘AND user_password = «oro’ a ‘=’ a ‘;»;

En consecuencia, dado que la declaración a = a siempre es cierta, se puede conceder la entrada al atacante sin tener credenciales de inicio de sesión válidas.

Como proteger su base de datos

Sanear las entradas

Una técnica importante que debe utilizar para proteger su base de datos de los ataques de inyección SQL es sanear las cadenas de entrada. Si desinfecte la entrada del usuario en el servidor, se eliminarán las órdenes nocivas potenciales y asegurarse de que los usuarios sólo ofrecen el tipo de entrada adecuado.

Por ejemplo, en PHP puede utilizar el archivo mysqli _real _escape _string () función para escapar de los caracteres que podrían alterar las características de la orden SQL.

He aquí la versión mejorada del Código mencionado anteriormente.

?php
$ my_username= mysqli_real_escape_string $ _POST([‘username‘]);
$ my_password= mysqli_real_escape_string($ _POST[‘password‘]);
$ my_sql_query= «SELECCIONAR * De usuarios WHERE nombre de usuario=«. $ My_username. » ‘AND user_password =’«.$ my_password» ‘;»;
?>

Con las mejoras, el formulario web se protegería al un atacante incluya un carácter de escape () delante de comillas simples en los campos.

También puede limpiar las entradas de los usuarios asegurándose de que los campos numéricos o alfanuméricos no tienen caracteres de símbolo y elimine el espacio en blanco y los caracteres de línea nuevos antes de enviarlos para el procesamiento en el servidor.

Además, debe garantizar que las entradas del usuario estén validadas para mantener las pautas establecidas para la longitud, la sintaxis y el tipo. Por ejemplo, si los usuarios proporcionan direcciones de correo electrónico en un formulario, se deben filtrar para permitir sólo los caracteres que constituyen una dirección de correo electrónico.

Restringe los permisos de la base de datos

Debe evitar dar privilegios excesivos a los usuarios. Cuando su aplicación se conecte a una base de datos, asegúrese de que los usuarios sólo se les concedan los privilegios necesarios para este propósito.

De este modo, reducirá los efectos de cualquier ataque de inyección SQL que pueda comprometer la seguridad de su base de datos.

Por ejemplo, si utiliza el servidor Microsoft SQL, puede limitar los permisos de base de datos de la siguiente manera.

negar seleccionar encendido sys.tables a sqldatabasepermit;

negar seleccionar encendido paquetes sys. a sqldatabasepermit;

negar seleccionar encendido sys.sysobjects a sqldatabasepermit;

Utilice consultas parametrizadas

Con esta técnica sencilla y eficaz, puede separar los datos proporcionados por los usuarios del código que alimenta la aplicación.

Como tal, los dos no interactuarán directamente, lo que le permitirá minimizar los efectos de los ataques de inyección SQL.

Es importante destacar que debe evitar revelar información de errores de base de datos a los usuarios. Si los atacantes consiguen los mensajes de error, los pueden utilizar para aprovechar la seguridad de su base de datos.

Conclusión

La inyección SQL es uno de los tipos habituales de ataques que los piratas informáticos utilizan para comprometer los sistemas. Por lo tanto, debe estar atento y proteger adecuadamente su infraestructura de TI de este tipo de ataques.

Las técnicas enumeradas en este artículo son sencillas y puede que no le ofrecen una protección completa de este tipo de ataque. Por ello, debe de aprender del expertos en seguridad cibernética sobre cómo reforzar las medidas de protección contra inyecciones SQL.