Mostrando postagens com marcador Segurança. Mostrar todas as postagens
Mostrando postagens com marcador Segurança. Mostrar todas as postagens

quinta-feira, 17 de abril de 2008

Proteção Contra SQL Injection

Como é de comum a todos, ou deveria ser, os maiores ataques dos hackers aos sites são através de SQL Injection, venho por meio desse post ensinar a se defender desses ataques.

Se engana quem pense que os ataques são sempre feitos em formulários, os ataques mais fortes são feitos pela url, a famosa querystring.

Ex: www.dominio.com.br/index.asp?id=4

Isso é um perigo se estiver sem proteção, e a maioria dos sites hoje em dia estão desprotegidos a esse tipo de ataque, parece mentira, mas com esse ataque é possível dar updates e drops no banco, criar procedures e até mesmo copiar arquivos executaveis para dentro do servidor e executá-los! Mas é claro que não vou ensinar a fazer isso aqui, hehehe, esse artigo é para a proteção.

Uma das melhores proteções, é criar usuários diferentes no banco, um usuário para selects e outro para update/drop/delete, e usar nas páginas de consulta o usuario de select.

Mas vou mostrar também uma função bem útil quem ajuda muito a pegar os espertinhos, segue ela abaixo:


Sub Valida_Request()

Set objRegExpr = New RegExp
objRegExpr.Global = True
objRegExpr.IgnoreCase = True
objRegExpr.Pattern = """|'|;| delete |drop|insert|select|update|upload"

For Each obj In Request.Form
If objRegExpr.Test(Request.Form(obj)) Then
Response.Write "A palavra ou caractere "& Request.Form(obj) &" é invalido para o Campo " & obj & " favor substituí-lo ou retirá-lo."
Response.End
End If
Next

For Each obj In Request.QueryString
If objRegExpr.Test(Request.QueryString(obj)) Then
Response.Write "A palavra ou caractere "& Request.Form(obj) &" é invalido para o Campo " & obj & " favor substituí-lo ou retirá-lo."
Response.End
End If
Next

Set objRegExpr = Nothing

End Sub



Essa função deve ser chamada no topo de todas as paginas, ela evita que a comandos como delete|drop|insert|select|update|upload e caracteres como "|'|; sejam inseridos nos formularios e querystrings, esses são os principais comandos e caracteres usados pelos hackers para esse tipo de ataque.

Espero que tenham gostado da dica.

Abs a todos!