La inyección SQL consiste en la modificación del comportamiento de nuestras consultas mediante la introducción de parámetros no deseados en los campos a los que tiene acceso el usuario.
Este tipo de errores puede permitir a usuarios malintencionados acceder a datos a los que de otro modo no tendrían acceso y, en el peor de los casos, modificar el comportamiento de nuestras aplicaciones.
Vamos a ver con un ejemplo que significa eso de “Inyección de código”:
Supongamos que tenemos una aplicación Web (realizada en ASP por sencillez) en la que el acceso a ciertas secciones está restringido. Para restringir ese acceso creamos una tabla de usuarios y contraseñas y sólo los usuarios que se validen contra esa tabla podrán acceder a esos contenidos. Una manera de que los usuarios se validen será colocar un par de cuadros de texto en nuestra página Web (por ejemplo txtUsuario y txtPassword) donde puedan introducir su nombre y su contraseña y enviar ese par usuario/contraseña a la base de datos para comprobar si es válido.
Primero creamos la tabla que vamos a usar y la rellenamos con datos:
use web
-- Nuestra base de datos se llama web
go
-- Creamos una tabla para almacenar los pares usuario/contraseña
create table usuarios (Usuario varchar (50) not null primary key,
Password varchar (50))
go
-- Introducimos un par de datos de prueba
insert into usuarios (Usuario, Password) values ('Admin', '1234')
insert into usuarios (Usuario, Password) values ('Usuario', 'abcd')
Ahora veamos el código de las páginas que forman parte del proceso de login.
index.htm
<form action="login.asp" method="post">
Nombre: <input type="text" name="txtUsuario"><br>
Password: <input type="password" name="txtPassword"><br>
<input type="submit">
</form>
Esta primera página es sencilla. Simplemente los dos cuadros de texto mencionados que enviarán los datos a la página de login.
Login.asp
<%
Dim Usuario, Password, RS, SSQL
Usuario = Request.Form("txtUsuario")
Password = Request.Form("txtPassword")
SSQL = "SELECT count(*) FROM Usuarios WHERE Usuario = '" & Usuario &
"' AND password='" & Password & "'"
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open SSQL, "Cadena de conexion"
If (RS.EOF) Then
Response.Write "Acceso denegado."
Else
Response.Write "Te has identificado como " & RS("Usuario")
End If
Set RS = Nothing
%>
Y en esta segunda página creamos dinámicamente una sentencia SQL que enviamos a la base de datos para la validación.
Si el usuario escribe Admin y 1234 la sentencia creada será:
“SELECT Count(*) FROM Usuarios WHERE Usuario=’Admin’ AND Password=’1234’”
Usuarios que han visto este tema también han visto...
- Performance del Response.Write. 3 Métodos y sus diferencias
- Agrupa el código ASP
- Archivo Global.asa con ASP
- Trabajando con Fechas y Horas
- Renombrar una columna de Access desde ASP
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.