SQL Injection
Por: julian.philippe • 16/6/2015 • Trabalho acadêmico • 586 Palavras (3 Páginas) • 257 Visualizações
Introdução 3
Funcionamento do SQL Injection 3
Prevenção de SQL Injection 4
Conclusão 5
Referencias 5
Introdução
Hoje em dia o número de informações armazenadas em bancos de dados cresce cada vez mais, e esse crescimento traz aplicações que interagem diretamente com os SGBD’s. Com um grande número de pessoas utilizando essas aplicações, é necessário que a aplicação possua um nível de segurança que impeça ataques e evite disponibilizar informações que sejam sigilosas, no entanto, ainda existem diversas aplicações com falhas de segurança que permitem a um usuário mal intencionado obter informações não necessárias, afetar a estrutura do banco de dados ou até mesmo ter acesso a todas as informações do banco. O SQL Injection é uma técnica utilizada para inserir comandos SQL a partir da entrada de dados da aplicação.
Funcionamento do SQL Injection
O SQL Injection manipula os comandos SQL para que possam trazer informações e dar acesso ao banco de dados, como já falado anteriormente. Para explanar melhor o funcionamento do SQL Injection, utilizaremos exemplos de códigos da linguagem Transact SQL em uma aplicação hipotética que pede um login e senha.
Em uma página de login, os dados de entrada seriam “Usuário” e “Senha” e a aplicação executaria os possíveis comandos SQL:
select count(*) from users
where ds_user = '@usuario' and ds_senha = '@senha'
select ds_user, ds_senha from users
where ds_user = '@usuario' and ds_senha = '@senha'
Considerando que as variáveis @usuario e @senha sejam os dados imputados pelo usuário na aplicação, no exemplo da primeira consulta, se existisse o usuário com a senha informada o retorno da query seria 1 e caso não fosse localizado o resultado seria 0, e na segunda consulta o resultado exibiria o usuário e a senha do usuário.
Em um ataque de SQL Injection, o usuário poderia deixar o campo “Usuário” vazio e colocar o seguinte comando no lugar do campo “Senha”: ' or 1 = 1 --'
Adicionando esse comando na variável senha as consultas ficariam dessa forma:
select count(*) from users
where ds_user = '' and ds_senha = '' or 1 = 1 --'
select ds_user, ds_senha from users
where ds_user = '' and ds_senha = '' or 1 = 1 --'
No primeiro caso o resultado é diferente de 0 e no segundo caso são exibidos todos os usuários. Esse tipo de comando poderia dar acesso não autorizado a qualquer pessoa.
Outra forma de comando que poderia ser utilizando
...