A sua aplicação está segura a SQL injection? 🤔
Acredito que a resposta seja sim, essa vulnerabilidade já foi mais comum há alguns anos. Apesar de ser bem conhecida no meio de segurança de dados, eu tive o primeiro contato com essa vulnerabilidade na última aula que assisti no curso.dev do Filipe Deschamps. E eu achei muuuuuito massa! E como o próprio Filipe frisou, saber reconhecer e consertar esse tipo de brecha vale ouro!
SQL injection (SQLi) é uma vulnerabilidade na segurança de uma aplicação que permite a “injeção” 💉 de queries maliciosas com o objetivo de atacar o banco de dados. Uma SQL injection bem sucedida pode acarretar ao acesso não autorizado a dados sensíveis ou até mesmo ter o poder de modificar e apagar dados importantes.
No vídeo do canal NetworkChuck é citado um exemplo bem básico usando um input “username” e “password” onde depois de preencher os dados e apertar “login” a aplicação conecta com o banco de dados e roda uma query para ver se o username e password existem. Se sim, o login é bem sucedido.
E é bem aqui que podemos encontrar uma brecha! ⚠️⚠️
A query enviada para o banco de dados provavelmente é parecida com isso aqui:
SELECT * FROM users WHERE username = ‘user’ AND password=’senha’
Quando estamos codando, é comum usarmos comentários para descomplicar o código, certo? Em SQL é possível fazer isso apesar adicionando “--” e tudo que vier depois disso vai ser ignorado.
No final do nosso nome de usuário “user” podemos abrir aspas e adicionar “--”, assim: user’--
E a query vai ficar dessa forma:
SELECT * FROM users WHERE username = ‘user’-- ’ AND password=’senha’
Isso significa que o “AND password=’senha’” vira comentário e é totalmente ignorado. Presumindo que exista um username = ‘user’, como o restando não vai ser processado ele só precisa desse dado e BOOM!! Login bem sucedido! Sem precisar de senha.
Não é legal?! 🤩
Isso aqui é só o básico, normalmente é bem mais complicado que isso. E apesar de ser uma forma de hack bem antiga, ainda pode ser encontrada. Por isso a importância de fazer um Query Sanitization ou Limpeza de Consulta. O lado bom é que podemos encontrar muitas bibliotecas e módulos que oferecem formas de sanitização para implementar em nosso código de forma bem fácil! Assim vamos estar tranquilos com nossas aplicações bem seguras. 😎
Fontes: https://portswigger.net/web-security/sql-injection
https://www.youtube.com/watch?v=2OPVViV-GQk
https://www.linkedin.com/feed/update/urn:li:activity:7151913275763417088/