Como todos sabemos, la base de datos es el corazón de nuestras aplicaciones WEB, en ella encontramos información sensible de nuestra empresa, por tal motivo es de vital importancia desarrollar aplicaciones con los máximos estándares de seguridad.
En este artículo se pretende dar a conocer a los desarrolladores información muy importante para evitar ataques desde internet, ya que en la actualidad se pueden encontrar muchas páginas con esta vulnerabilidad poniendo en riesgo no solo un equipo sino la red completa de una institución.

Como podrían atacar a nuestra Base de Datos
Supongamos que tenemos una ventana de usuario donde nos solicita el usuario y password. La forma sencilla de validar el acceso a nuestra aplicación sería construir un query donde se verificara que el usuario existiera.

Select count(*) from usuarios where username = ‘prueba' and password = ‘passprueba'

Si este query trae un registro, entonces significa que el usuario existe y su validación es correcta, si no trae registros entonces es incorrecta. A primer vista esto se ve correcto e inofensivo, pero que pasa si como usuario escribo lo siguiente:

Usuario : ‘ or 1=1

Aqui se esta modificando el query de la aplicación inyectando sentencias SQL. Con esto el query quedaría de la siguiente manera

Select count(*) from usuarios where username = ‘' or 1=1 --' and password = ‘passprueba'

Como pueden ver ya no nos importa el usuario ni el password, el query siempre nos va a traer registros violando la seguridad de la aplicación.

Así como se  modifico este query es posible insertar cualquier sentencia al manejador y alterar por completo la base de datos, incluso si la aplicación se ejecuta con el usuario sa, se podría tirar desde el manejador hasta el servidor completo, ver los usuarios de una red mandando nos correos a una cuenta si se tiene configurado el correo dentro del manejdaor, etc.

Así como pueden insertar sentencias desde una casilla del browser también es posible modificando el URL

http://localhost/products.asp?productId=0%20or%201=1

En este ejemplo se inserto un or 1=1 manejando los espacios como %20, por lo que en realidad se vería como:

http://localhost/products.asp?productId=0 or 1=1

Como protegernos de estos ataques

  • Nunca uses la cuenta de "sa" para correr tus aplicaciones
  • Usa comillas dobles . Crea una función que convierta todas las comillas simple a dobles, esto detiene por completo el ataque.
  • Quita los espacios. Crea una función que elimine los espacios.
  • No permitas sentencias de SQL. Crea una función donde se evite el uso de la sentencia "select", "insert", "update", "xp_", "exec", "—", "drop", "shutdown" o cualquier otra que pueda causar daño a tu institución.
  • Limite el tamaño de los campos, solo utiliza el número de caracteres necesarios.

Conclusión
Es de vital importancia tener siempre en mente en los diseños de nuestras aplicaciones la posibilidad de ataques por medio de SQL Injection, por tal motivo se deben de tomar como un requisito los puntos comentados para evitar su ataque.

Es importante comentar que estos ataques pueden llevarse a cabo en diferentes manejadores, como SQL Server, Oracle, Mysql, Sybase, etc.

You are not authorised to post comments.

Comments powered by CComment

DBASupport - Foro

Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos
Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...
URGE AYUDA
  • Topic started by
  • in General
  • 16 years ago.
  • 16 years ago.
  • 30 replies
HOLA ESPERO ME PUEDAN AYUDAR. TEN GO UNA TABLA CON una estructura similar a la siguiente: id_mov cargo subtotal total...

Duada de Memoria de SQL Server 2005
  • Topic started by Erzengel
  • in General
  • 11 years ago.
  • 11 years ago.
  • 30 replies
Buen Día Recurro nuevamente a su sabiduría. Quiero saber el porque tiene un tope SQL Serever de 2GB en Windows server 2003 de 32 bit y si alguien...

SqlDateTime overflow
  • Topic started by
  • in General
  • 15 years ago.
  • 15 years ago.
  • 11 replies
Alguno de ustedes ha tenido este problema: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.' Les...

problemas para iniciar el agente sql
  • Topic started by acgch
  • in General
  • 14 years ago.
  • 14 years ago.
  • 11 replies
Recientemente para asegurar el sql server 2005, cree una cuenta sql con derechos de sysadmin y borre el grupo BUILTIN\Administradores para evitar...

Puerto de Enterprise Manager
  • Topic started by
  • in General
  • 13 years ago.
  • 13 years ago.
  • 12 replies
Hola, estoy tratando de acceder a mi enterprise manager de un oracle 10G, donde puedo ver en que puerto esta levantando para entrar desde mi...
Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos
Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...
Deshabilitar todos los jobs
  • Topic started by agamez
  • in Jobs
  • 4 years ago.
  • 4 years ago.
  • 1 reply
Buenos días, alguien sabe como puedo deshabilitar rapidamente todos los jobs de SQL Server, gracias.

Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...