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!

quarta-feira, 16 de abril de 2008

FrameWork Ajax no Domino

A muito quando descobri o Ajax e me interessei pelo assunto passava por maus "bocados" para utilizar a biblioteca de scripts dentro do domino.
Primeiro anexava dentro de uma base NSF os arquivos um a um para poder referencia-los dentro dos elementos de designer da aplicação. Depois em uma matéria do CODESTORE vi que poderia utilizar o WEBDAV para que através de um FTP anexar os arquivos transferindo como se fosse uma pasta normal. Achei isso um máximo. Sem falar nas possibilidade de um designer em outro local poder alterar uma aplicação.
Posso até estar atrasado no assunto, mais garanto que muitos colegas que trabalham com o Lotus Notes não sabe que podemos utilizar o recurso que vou explicar agora.
Para melhor utilizar a biblioteca de scripts seja ela qual for (Dojo, Yahoo! UI, scriptaculus e etc.) basta colocar a pasta de arquivos abaixo do seguinte caminho do servidor Domino: \Data\domino\html\
Assim podemos referenciar qualquer biblioteca que desejamos utilizar. Claro que é importante a organização dentro do diretório e muito cuidado para não acontecer acidentes. ;)

Veja como fiz com o DOJO.

Depois que adicionar a biblioteca na pasta html do servidor Domino podemos fazer referência aos arquivos dentro da pasta html.

E agora mãos a obra. Podemos brincar com as bibliotecas conforme nossa necessidade e utilizar duas ou mais bibliotecas dentro de uma mesma aplicação.

Download de algumas Bibliotecas:
Dojo ToolKit
Yahoo! UI
Scriptaculos
Ext JS