Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mows

[Resolvido] SQL injection

Recommended Posts

Boa tarde pessoal.

 

Estou passando 3 formas de diminuir os ataques de SQL injection no meu site.

Ao meu ver essas formas abaixo já garantem que boa parte dos ataques não atingirão seus objetivos.

Mas gostaria de mais sugestões para abranger mais as possíveis formas de ataques.

 

1 - tratamento de querystring

Parâmetro tipo INT: 
NomeParâmetro = CLng(Request("NomeParâmetro "))

Parâmetro tipo STRING:
strUserName  = Replace(Request.Form("txtUsername"), "'", "''")
strPassword = Replace(Request.Form("txtPassword"), "'", "''")

2 - Função limpa SQL


Function LimpaSQL(texto)
	If not IsNull(texto) Then
		'texto = Replace(texto, "-", "")
		texto = Replace(texto, "'", "")
		'texto = Replace(texto, "<", "")
		'texto = Replace(texto, ">", "")
		'texto = Replace(texto, "\", "")
		'texto = Replace(texto, "/", "")
		'texto = Replace(texto, ";", "")
		'texto = Replace(texto, "(", "")
		'texto = Replace(texto, ")", "")
		'texto = Replace(texto, "?", "")
		texto = Replace(texto, "*", "")
		'texto = Replace(texto, "&", "")
		texto = Replace(texto, "#", "")
		texto = Replace(texto, "§", "")
		texto = Replace(texto, "³", "")
		texto = Replace(texto, "select", "")
		texto = Replace(texto, "update", "")
		texto = Replace(texto, "drop", "")
		texto = Replace(texto, "script", "")
		texto = Replace(texto, "©", "")
	Else
		texto = ""
	End If
	LimpaSQL = texto
End Function

3 - Grants de usuários

Esse tratamento visa filtrar os grants de usuarios externos e internos. Selecionando qual tabela deve receber permissão de select, update e insert para cada usuário.

Agradeço as sugestões.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica Fernando.

 

Se você é DBA talvez você possa me ajudar numa questão.

 

Nas permissões de tabelas no SQL, se eu dar grant em Select o usuário poderá fazer select. E nas opções que eu não der deny, como insert, update, ele irá reconhecer que o usuário não tem permissão ou é necessário que eu marque a opção deny?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mows

 

Se você não especificou GRANT ou DENY para o usuário, o mesmo não terá permissão. Por padrão o usuário que você acabou de criar não possui acesso as operações SELECT, INSERT, UPDATE e DELETE. Outro ponto importante, DENY sempre prevalece sobre o GRANT.

 

[ ]s

 

Fernando Silveira

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando, então isso basicamente já não tiraria boa parte dos injections, já que se eu crio um tabela, não dou deny em insert e nem em update e mesmo assim algum esperto consegue burlar isso e inserir dados no banco?! Porque isso não funciona para os injections?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mows

 

Se uma "SQL Injection" estiver executando um DELETE, esse DELETE só vai funcionar se o usuário conectado no banco possuir permissão para isso.

 

O que acontece na maioria dos casos, é que não existe um controle de permissões para os usuários de aplicação. Nesses casos o usuário utilizado na aplicação possui mais privilégios do que deveria. Aí quando alguém usa uma "SQL Injection" o sistema executa o comando com sucesso.

 

O ideal é controlar esses privilégios no banco de dados e desenvolver alguns métodos na página web para não aceitar esses comandos.

 

Seria interessante se alguém do grupo tiver mais experiência com esse tipo de situação e compartilhá-la com o pessoal.

 

[ ]s

 

Fernando Silveira

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.