SQL Injection

Fala pessoal, no post de hoje vou tratar sobre SQL Injection. Para quem nunca ouviu falar sobre o tema, vou explicar brevemente uma maneira bem simples de compreender.


O SQL Injection é uma ação maliciosa realizada por um usuário mal intencionado em uma aplicação, na maioria dos casos web, onde ele informa em um campo de texto um código que vai prejudicar o banco de dados ou até mesmo conseguir visualizar dados que não deveriam. Imagine uma tela de login e senha, no campo login o usuário ao invés de digitar o seu login coloque um texto que vai executar uma ação no seu banco de dados, por exemplo:


Login: caio

Colocou no campo login: a'; SELECT * FROM TB_USUARIO--


Se a aplicação não estiver devidamente tratada e o banco não estiver também protegido contra essas tentativas o código colocado de forma errada no campo login pode executar um select na tabela de usuários e exibir para a pessoa todas as informações. Basicamente o perigo é dentro da aplicação, concatenar o valor que foi informado no campo com o script que a aplicação executa.


@LOGIN - Esta preenchida com o valor informado no campo login da tela da aplicação


SET @STR = 'SELECT 1 FROM TB_USUARIO WHERE LOGIN = ' + @LOGIN +''''


No cenário ideal, o código acima ficaria assim


SELECT 1 FROM TB_USUARIO WHERE LOGIN = 'caio'


Já com o sql injection ficaria assim


SELECT 1 FROM TB_USUARIO WHERE LOGIN = 'a'; SELECT * FROM TB_USUARIO--'


Ou seja, o primeiro comando executaria o select previsto pela aplicação e depois do ponto e vírgula, executaria mais um comando de select na tabela retornando todas as colunas. Isso além de perigoso pois o usuário que fez isso pode usar outros logins, se caracteriza também como vazamento de informações.


Então, o SQL injection é toda e qualquer tentativa como essa de burlar o que será executado no banco de dados, isso pode variar muito, desde leituras de dados, até alteração e exclusão deles.


Apesar de parecer inofensivo hoje em dia devido a alta tecnologia, o problema com SQL injection se trata muito mais de uma falha lógica do que de tecnologia. Essa técnica se baseia em brechas deixadas pelos desenvolvedores (de sistemas e do banco, afinal também existe programação dentro do SQL Server). O conceito é simples e deve ser tratado desde o inicio dos projetos, como um requisito básico de segurança. As vezes parece (e é) tão obvio que infelizmente pode acabar passando e as aplicações serem publicadas com esse tipo de falha.


Como profissional da área de dados, recomendo que esteja sempre atento e por mais que isso na maioria dos casos esteja muito mais relacionado com a aplicação, o DBA deve orientar e ajudar as equipes de desenvolvimento.


Algumas medidas simples para evitar o SQL Injection:

1) Dê permissão ao login do banco que a aplicação utiliza o mais refinado possível (evitando ações a nível de servidor ou estrutura do banco)

2) Campos nas telas ou parâmetros devem ser criados com os tamanhos específicos (evite VARCHAR(MAX))

3) Nunca concatene de forma direta o valor informado em um campo ou parâmetro (trate o dado antes de concatenar)

4) Não permita caracteres diferentes de letras se naquele campo não for necessário (campo login porque usaria um ponto e vírgula ou um * )

5) Esteja sempre atento as mudanças na aplicação


Com a LGPD já em vigor (desde setembro/2020) a busca por segurança deve se tornar cada vez mais importante, o vazamento de dados tem se tornado cada vez mais comum e com certeza uma das tentativas que serão utilizadas pelas pessoas mal intencionadas será o SQL Injection. Não permita que isso aconteça!


Nos acompanhe em nossas redes sociais!

Youtube(vídeos novos todas as quartas): https://www.youtube.com/channel/UChFeqc-m7HZNdkoP0CshMGQ

Face & Instagram(conteúdo diário): dba on boarding


Até a próxima, tchau!


#CG_Administration




37 visualizações0 comentário