Proteções contra Injeção SQL
Pessoal,
quais são as melhores dicas para proteger um sistema web contra Injeção SQL? No campo de login estou tratando as aspas simples da seguinte forma:
login = Trim(Request.Form("login"))
login = Replace(login, "'", "")
login = Replace(login, "|", "")
senha = Trim(Request.Form("senha"))
senha = Replace(senha, "'", "")
senha = Replace(senha, "|", "")
Só isso resolve? O ideal seria construi uma função com uma rotina para dar uma replace em caracteres invalidos. Acho que essa ideia seria boa.
Segue uma função que um amigo me passou, mas segundo ele essa função funciona bem para evitar os ataques mas o problema é que em sistemas com grandes acessos ela poderá travar pois ela faz um loop nas requisições, segue:
<%
Function BlockInjection(entrada)
Dim i
Dim palavra
Dim arrayReservado : arrayReservado = Array(_
"UPDATE", _
"SELECT", _
"INSERT", _
"DELETE", _
"DROP", _
"XTYPE", _
"EXEC", _
"VARCHAR", _
"DECLARE", _
"'", _
"EXECUTE", _
"XP_", _
"FROM", _
"NULL", _
"SET", _
"CAST", _
"CONVERT", _
"DATABASE", _
"TABLE", _
"WHERE", _
"--", _
"-", _
";", _
"--", _
"|", _
"""", _
"(", _
")", _
"%" _
)
For i = 0 To uBound(arrayReservado)
palavra = 1
While palavra <> 0
palavra = inStr(1, entrada, arrayReservado(i), vbTextCompare)
If palavra <> 0 Then
entrada = Left(entrada, palavra - 1) & "" & Asc(Mid(entrada, palavra, 1)) & ";" & Right(entrada, Len(entrada) - palavra)
End If
Wend
Next
blockInjection = entradaEnd Function
%>
Ai você precisa passar assim: SELECT * FROM tabela WHERE id = &BlockInjection(Request("id"))
Discussão (5)
Carregando comentários...