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!

2 comentários:

Anderson disse...

Muitooo Bomm esse código

Estava a procura de algo desse tipo

Parabéns

Unknown disse...

Obrigado Anderson. Infelizmente não estamos tendo tempo para postar mais coisas desse tipo. Mais se tiver algum sugestão será muito bem vinda.

Obrigado.