Buscar (Don't Edit)

jueves, 14 de noviembre de 2013

Algunos tips para protegerte de SQL Injection

Seguridad... que tema tan delicado, y aún más en una profesión donde lo importante es el manejo de la información, esa responsabilidad de escribir código y más código para manipular dicha información, hacerla llegar de un lado a otro, presentarla de distintas formas, encriptarla, desencriptarla, etc. Sin duda alguna la seguridad de la información es un tema para hablar horas y horas, y que implica muchas técnicas para salvaguardarla, y quizás nosotros no seamos unos eruditos en seguridad, pero podemos aplicar alguna que otra técnica para hacer que nuestros sistemas sean menos vulnerables, sobre todo para el tema que encabeza este post: SQL Injection.


¿Qué no sabes que es SQL Injection? Pues pasa primero por aqui. Ahora que ya lo tenemos captado continuemos.

Un ejemplo clásico de cómo nos pueden inyectar SQL es en los formularios de login. La mecánica es muy sencilla, si tenemos un formulario como el siguiente: 


Lo normal es que para validar las credenciales introducidas por el usuario, en nuestro código realicemos un procedimiento como el siguiente:

La instrucción sql que se formaría al introducir los datos sería algo como esto:


Precisamente, aquí es donde radica el error, el hecho de concatenar las cadenas en la instrucción sql es lo que lo hace vulnerable a sql injection. Veamos que pasa si introducimos los siguiente datos: En usuario 1 y en contraseña ' or 1=1--




Como vemos la instrucción sql formada evaluará si existe un Id en base de datos con las credenciales introducidas pero a su vez también evaluará que la condición 1=1 sea cierta, por lo que devolverá todos los Id de los usuarios en base de datos. Así de simple, hemos sido inyectados con sql. Esto daría pie a un sin fin de códigos maliciosos, pudiendo hacer algo como lo siguiente:


Si, lo se, muy doloroso, pero no se preocupen que así como es tan fácil inyectar sql, también es fácil prevenirlo. Veamos como hacerlo.
El truco está en crear nuestras sentencias sql parametrizadas, por ejemplo en nuestro código c# nos quedaría de la siguiente manera:
Y listo, eso es todo, así de simple. Ahora que si quieren hacerlo en:

Java

Php

Python


O pueden hacerlo a través de Stored Procedures, pero siempre y cuando la instrucción esté parametrizada.

Saludos ;)

2 comentarios:

  1. Muy buen post con esto ya sabes que no debes hacer tan simple la validaciones directamente a la base de datos si no mediante codigo, para no tener un problema si te hackean.

    ResponderBorrar