Neste vídeo, entenda o conceito de #SQLInjection, veja como ele funciona e aprenda as melhores práti...
Video Transcript:
você aí jolin estudante de programação provavelmente ao estudar você busca aprender diversas coisas ao criar um sistema certo como criar uma tela bonitinha no front-end criar uma payr conexões no banco de dados no backend mas existe algo muito importante que alguns programadores iniciantes ignoram que além de você criar uma aplicação funcional você deve criar também algo seguro portanto ao desenvolver um site por exemplo você tem que se atentar as vulnerabilidades que ele pode ter Pois é a partir dessas vulnerabilidades que os ataques maliciosos acontece sendo um deles e um dos mais famosos o skl injection se você não faz ideia do que seja isso fique tranquilo meu Jovem Pan pois nesse vídeo nós vamos ver o que é como que esse tipo de ataque funciona e como que a gente consegue evitar isso no código Beleza então já deixa o like no vídeo e vamos lá antes da gente partir pra prática vamos ver o que que esse tal aí de skl injection o skl injection é um tipo de ataque cibernético que se faz inserir comandos SQL maliciosos em um sistema web caso você aí não saiba o que que é um comando SQL de fato é mais ou menos uma instrução que você vai dar pro banco Dizendo para ele que tipo de operação que você quer que ele faça e é daí que vem os famosos selects inserts updates dentre outros o objetivo desse tipo de ataque é ter acesso ao banco de dados e conseguir modificar e controlar ele através desse tipo de comando tudo isso daí rapaziada pode levar a exposição de dados confidenciais guardados no banco e consequentemente danificando o sistema e sua integridade né como é que funciona esse tipo de ataque ele funciona da seguinte maneira eles podem acontecer por meio de um formulário ou de uma url Onde você consegue inserir esse tipo de comando malicioso dentro do formulário ou dentro do parâmetro da URL como tem aqui no próprio exemplo na URL a gente tem https loja. com bar produtos bar tênis o parâmetro em específico que vai ser passado que vai ser utilizado lá no banco vai ser o Barra tênis mas quer dizer tênis né só que no skell injection esse tênis poderia ser misturado com algum outro tipo de comando malicioso a mesma coisa serve pro formulário por exemplo se a gente tem o formulário de login a gente consegue inserir além de por exemplo o login e senha algum tipo de comando malicioso e utilizar isso daí para fazer o at bom pessoal saindo mais daquela parte teórica vamos ver aqui como é que funciona na prática essa parte de inserção de SQL malicioso dentro de um formulário para isso eu trouxe aqui essa pagin Zinha básica em HTML CSS com aqui uma página de login certo dentro dela aqui posso vir aqui e adicionar meu usuário Vamos colocar aqui usuário e a senha vai ser 1 2 3 por exemplo 2 3 4 e aqui eu coloquei no console aqui da página para ele cuspir pra gente qual que é a query que tá sendo utilizado no momento em que eu faço o submit aqui no momento em que eu clico para enviar esse formulário bom se você não sabe o que é query né basicamente o comando SQL que é utilizado aqui nessa parte tá se você não sabe de banco de dados ou não tem experiência com isso basicamente ela quer dizer o seguinte seleciona tudo para mim que estiver na tabela users onde o login do usuário Fortal e a senha for tal se tiver algum cadastro lá dentro dessa tabela com esses dados aqui que foram informados beleza ele vai trazer alguma coisa senão ele não vai trazer nada e aqui que se en contra a vulnerabilidade que pode ser explorada lá dentro do sistema lá no backend para ficar aqui mais prático vamos pegar aquela mesma query que estava lá no console e rodar aqui no banco de dados tá aqui eu só adicionei as aspas que eu esqueci de colocar lá mas bom se eu vi aqui e selecionar bom ele não vai trazer nada pra gente né porque em tese não tem esse registro dentro dessa tabela uses mas se eu vi aqui e selecionar por exemplo se eu colocar para selecionar tudo aqui sem nenhum er beleza Ele trouxe pra gente todos os cadastros que estão dentro dessa tabela Mas é aqui que tá o ponto chave onde é explorada a vulnerabilidade dentro do sistema normalmente o cara que tá invadindo o sistema o que que ele vai fazer ele vai adicionar aqui no meio desse processo alguma parte maliciosa dentro da query no caso aqui eu vou colocar aqui para vocês beleza aqui eu adicionei um detalhe a mais na parte da senha eu coloquei esse or 1 = a 1 o que que isso quer dizer se eu pegar essa mesma parte que eu adicionei lá na senha e colocar para rodar aqui ele trouxe tudo aqui para mim Note que se eu rodar essa mesma query sem essa parte do 1 igual a 1 Ele trouxe nada aqui para mim certo porque não existe esse registro de usuário com login usuário com sen1 2 3 4 dentro da tabela porém se eu rodar tudo com esse or 1 = 1 Ele trouxe tudo do banco para mim e é nessa parte que o erro que a falha aqui dentro do sistema está porque basicamente eu tô dizendo aqui pro banco de dados o seguinte ó seleciona tudo para mim que estiver nessa tabela usuários onde o login for igual ao usuário e a senha for 1 2 3 4 ou se um for igual a um basicamente algumas dessas condições aqui tem que ser verdadeira para o banco conseguir trazer alguma informação preencher alguma informação aqui para mim No retorno dele certo na hora que o banco ele vai fazer a consulta ele vem lá e vê esse login usuário existe dentro do banco não e a senha 1 2 3 4 existe para esse usuário também não porém 1 igual a 1 é uma informação verdadeira sim e é a partir daí que ele consegue trazer essas informações pra gente caso não tenha ficado muito claro para você que não entende muito bem de banco de dados ou de comandos SQL é basicamente o seguinte no momento que o usuário vai adicionar ali o usuário e a senha né aquela página de login por exemplo ele simplesmente adicionou uma condição a mais que consegue explorar uma brecha ali no comando SQL que é o executado Tá chaulin mas me responde o seguinte se um usuário malicioso consegue adicionar essa pequena parte no input ali de senha eu posso adicionar esse mesmo tipo de coisa em qualquer input de qualquer site e a partir daí eu fazer o mesmo tipo de ataque certo Claro que não né irmão eu não tô aqui para te ensinar a fazer um ataque eu tô aqui para te ensinar a se prevenir desse tipo de ataque acontece que esse problema ocorre lá no backend esse problema ocorre na forma que a query que a chamada da query está implementada dentro do backend e é agora que a gente vai ver o por que acontece esse problema qual é a causa desse problema o que que tá faltando no código bom para isso eu trouxe um exemplo prático para vocês usando como base aquela tela de login aqui se você não entende muito bem sobre uma camada de persistência ou uma classe necessariamente utilizada paraa conexão com o banco de dados você não precisa entender tanto aqui eu vou resumir para você basicamente eu tenho aqui essa string SQL que é aquela mesma string utilizada na tela e aqui eu tenho a lógica responsável por executar essa query lá no banco de dados ou seja ele vai fazer uma requisição lá pro banco de dados mandando executar o que tá dentro dessa string SQL e é aqui que se encontra o erro que a gente quer tratar por quê Porque aqui a gente tem select as trsc from user we login o user. get login e o password user.
get password Ou seja todos esses dois parâmetros que estão sendo passados aqui serão lidos como uma string ou seja tudo que estiver aqui dentro será executado l no banco de dados sem nenhum tipo de tratamento e é exatamente aí que se encontra o erro pois se o usuário mal intencionado inserir algum comando malicioso aqui dentro o banco de dados vai est nem aí ele vai ler isso daí vai executar Sem Mais Nem Menos entendeu E bom como é que a gente consegue corrigir esse erro todo esse problema consegue ser corrigido com uma coisa simples com um simples ponto de interrogação mas chaulin como assim como é que um ponto de interrogação vai resolver isso bom acontece que um ponto de interrogação nesse cenário aqui é tratado como uma variable a bind variable ela é responsável por servir como parâmetro no momento da consulta ela é utilizada como parâmetro dinâmico no momento em que a consulta for realizada Calma que a gente vai entender isso melhor para isso pessoal eu trouxe aqui para vocês aquele mesmo trecho de código que eu mostrei porém com a utilização dos pontos de interrogações né com as bind variables aqui explicando aqui para vocês de forma rápida Eu tenho aquela mesma string SQL que vai ser a consulta que vai ser realizada no banco de dados Mas agora eu tenho aqui a tratativa específica pros parâmetros aqui ao invés de eu passar diretamente o user. get login e o user.