Los ataques de inyección SQL atacan los sitios web que dependen de bases de datos relacionadas.
En este tipo de páginas Web, los parámetros se pasan a la base de datos como una consulta de SQL. Si un diseñador no verifica los parámetros que se pasan en la consulta de SQL, un hacker puede modificar la consulta para acceder a toda la base de datos e incluso modificar su contenido.
Algunos caracteres posibilitan coordinar varias consultas de SQL o ignorar el resto de la consulta. Al insertar este tipo de carácter en la consulta, un hacker puede ejecutar potencialmente la consulta que elija.
Ante la siguiente consulta, que espera un nombre de usuario como parámetro:
SELECT * FROM usuarios WHERE nombre="$nombre";
Un intruso sólo necesita escribir un nombre, por ejemplo, "toto" O 1=1 O nombre="titi" para que la consulta quede de la siguiente manera:
SELECT * FROM usuarios WHERE nombre="toto" OR 1=1 OR nombre="titi";
Con la consulta anterior siempre se realiza la cláusula WHERE, lo que significa que devolverá registros que corresponden a todos los usuarios.
Además, algunos sistemas de administración de bases de datos, como por ejemplo Microsoft SQL Server, poseen procedimientos almacenados que posibilitan ejecutar comandos de administración. Estos procedimientos son potencialmente peligrosos ya que permiten que un usuario malintencionado ejecute comandos de sistema que puedan causar una posible intrusión.
Estas son algunas reglas que pueden ayudarle a protegerse contra ataques de inyección SQL: