Protegendo seu código ASP contra SQL Injection

Mantenha seu código ASP seguro e evite ataques em seu site ou aplicação

30/01/2024

Protegendo seu código ASP contra SQL Injection

Protegendo seu código ASP contra SQL Injection

Entenda como funciona este tipo de ataque

SQL Injection é um ataque que permite a invasores modificar operações de banco de dados através de um aplicativo. Isso pode resultar em acesso indevido e manipulação de dados, incluindo a exclusão de tabelas ou alteração de senhas de usuários.

Aqui está um exemplo de código ASP Clássico vulnerável a SQL Injection, com um parâmetro de URL:

<%
' Exemplo de código ASP Clássico vulnerável a SQL Injection
' Recebendo 'id' da URL
Dim id
id = Request.QueryString("id")
' Montagem insegura da consulta
Dim query
query = "SELECT * FROM users WHERE id = " & id
' Execução da consulta...
%>

Este código é vulnerável porque usa diretamente um dado externo ('id' da URL) na consulta SQL. Por exemplo, se o parâmetro 'id' da URL for alterado para id=0; DROP TABLE users;, a consulta se tornará SELECT * FROM users WHERE id = 0; DROP TABLE users;, resultando na exclusão da tabela 'users' e perda de todos os dados.

Protegendo Seu Código de SQL Injection com Consultas Parametrizadas

Uma das maneiras mais eficazes de proteger seu código ASP Clássico contra SQL Injection é o uso de consultas parametrizadas. As consultas parametrizadas separam os dados da instrução SQL, impedindo que os invasores insiram ou alterem comandos SQL. Agora vamos aprimorar nosso código inicial com esta técnica.

<%
' Definindo constantes para tipos de dados, direção de parâmetros e tipo de comando
Const adInteger = 3
Const adParamInput = 1
Const adCmdText = 1

' Protegendo o código com consultas parametrizadas
' Estabelecendo conexão com o banco de dados
Dim conn, cmd, param
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={SQL Server}; SERVER=localhost; DATABASE=banco; UID=usuario; PWD=senha"

' Garantindo que 'id' seja tratado como parâmetro
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * FROM users WHERE id = ?"
cmd.CommandType = adCmdText

' Adicionando parâmetro à consulta
Set param = cmd.CreateParameter("id", adInteger, adParamInput, , Request.QueryString("id"))
cmd.Parameters.Append param

' Executando a consulta de maneira segura
Set rs = cmd.Execute
' Código para manipulação dos resultados...

' Limpando objetos
rs.Close
Set rs = Nothing
cmd.Close
Set cmd = Nothing
conn.Close
Set conn = Nothing
%>

Ao utilizar consultas parametrizadas com constantes claramente definidas, garantimos que os valores inseridos na consulta sejam tratados apenas como dados, protegendo eficazmente contra injeções SQL.

Sanitização e Validação de Dados em ASP Clássico

Sanitizar e validar os dados de entrada é crucial para prevenir SQL Injection em ASP Clássico. A sanitização remove elementos potencialmente perigosos dos dados, enquanto a validação verifica se eles atendem aos critérios específicos antes do processamento. Vamos ver como sanitizar valores inteiros.

<%
' Sanitizando e validando dados de entrada
Function ConverteNumero(inputData)
	If IsNumeric(inputData) Then
		' Se for numérico, converte para um número longo (inteiro)
		ConverteNumero = CLng(inputData)
	Else
		' Se não for numérico, define como zero ou outro valor padrão
		ConverteNumero = 0
	End If
End Function

' Uso da função
Dim userId
userId = ConverteNumero(Request.QueryString("id"))

' Código para usar userId em operações seguras...
%>

A função ConverteNumero assegura que o valor de entrada seja convertido para um número inteiro se for numérico, e definido como zero (ou outro valor padrão) caso contrário. Esta abordagem protege contra injeções SQL, assegurando que apenas dados seguros e esperados sejam utilizados nas operações do banco de dados.

É importante implementar uma validação rigorosa no lado do servidor para todos os dados de entrada, em especial parâmetros de URL e dados de formulário. Nunca confie apenas na validação do lado do cliente, como validações JavaScript.

Conclusão

Proteger seu código ASP Clássico contra SQL Injection é essencial para a segurança da sua aplicação. Neste artigo, abordamos diversas técnicas para evitar essa vulnerabilidade, incluindo o uso de consultas parametrizadas, sanitização e validação de dados, além de outras práticas recomendadas para a segurança de sistemas web.

Domínios hospedados
Clientes satisfeitos