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!
Comments