4. Dim queryString As String = _ "SELECT * FROM users WHERE username = ‘” & Me.user.text & ”’ AND password = ‘” & Me.pass.text & ”’;“ Using connection As New SqlConnection(connectionString) connection.Open() Dim command As New SqlCommand(queryString, connection) Dim reader As New SqlDataReader = command.ExecuteReader() If reader.Read() then result.text = “Bienvenido ” & reader(0) Else result.text = “No se pudologuear!” End if connection.Close() End Using
5. No hay validación del contenido de la información Los usuarios pueden escribir cualquier cosa!
6. ‘ OR 1 = 1 -- SELECT * FROM usuarios WHERE username = ‘’ OR 1 = 1 --’ AND password = ‘cualquiercosa’;“ ‘; INSERT INTO usuarios VALUES(‘TuUsuario', ‘TuPassword') -- SELECT * FROM usuarios WHERE username = ‘‘; INSERT INTO usuarios VALUES(‘TuUsuario', ‘TuPassword') --’ AND password = ‘cualquiercosa’;“ ‘; DROP TABLE usuarios -- SELECT * FROM usuarios WHERE username = ‘‘; DROP TABLE usuarios -- ’ AND password = ‘cualquiercosa’;“
7. Evitar la concatenación de variables con sentencias SQL Hacer validaciones fuertes y exhaustivas Desconfiar de lo que los usuarios escriben Apoyarse con las herramientas que provee ASP
8. Dimquery As String = “SELECT * FROM usuarios WHERE username = @user AND password = @pass;” … DimuserParameter As New SqlParameter(“@user”, SqlDbType.NVarChar, 25) WithuserParameter .Value = Me.user.text EndWith Command.Parameters.Add(userParameter) ‘mismo procedimiento para @pass …
9. CREATE PROCEDURE dbo.GetLogin( @usernamevarchar(25), @passwordvarchar(25) ) AS SELECT * FROM usuarios WHERE username = @username AND password = @password Dim procedimiento As String = “GetLogin” … Dim command As New SqlCommand(procedimiento, connection) … command.CommandType = CommandType.StoredProcedure