Executando verificação de segurança...
4
Gobs
2 min de leitura ·

SQL Injection e XSS: ataques simples que ainda derrubam sistemas

Mesmo antigos, esses dois ataques continuam sendo usados para invadir sistemas todos os dias.
Como muitos frameworks já protegem por padrão, muitos devs não sabem o que é e como evitar.

Neste post, vamos mostrar de forma rápida e prática o que são esses ataques, como eles funcionam na vida real, e como evitar — mesmo sem framework.


1️⃣ SQL Injection

⚠️ Exemplo real do que não fazer (PHP):

$email = $_POST['email'];
$senha = $_POST['senha'];
$sql = "SELECT * FROM users WHERE email = '$email' AND senha = '$senha'";

Se alguém digitar:

[email protected]'-- 

A query vira:

SELECT * FROM users WHERE email = '[email protected]'-- ' AND senha = 'qualquer'

💥 O hacker entra sem senha, porque -- comenta o resto.


✅ Forma certa em PHP (usando PDO):

$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email AND senha = :senha");
$stmt->execute(['email' => $email, 'senha' => $senha]);

Por que isso funciona?
O banco não interpreta o que foi digitado como parte da query.
Os dados são tratados como valores, não comandos como no exemplo anterior.


✅ Forma certa em Node.js (MySQL):

connection.query(
  "SELECT * FROM users WHERE email = ? AND senha = ?",
  [email, senha]
);

Mesmo princípio: os dados vão fora da query e não podem ser executados.


2️⃣ XSS – quando o navegador é enganado

⚠️ Exemplo do que não fazer:

echo "Comentário: " . $_GET['comentario'];

Se alguém acessar:

?comentario=<script>alert('Peguei você!')</script>

💥 O navegador roda o script. Isso poderia roubar cookies, tokens etc.


✅ Forma segura em PHP:

echo "Comentário: " . htmlspecialchars($_GET['comentario']);

Agora o navegador vê só o texto, não executa nada.


✅ Os frameworks modernos já protegem você

A maioria dos frameworks já cuida disso automaticamente, se você usar do jeito certo:

LinguagemFrameworkProteção contra
PHPLaravelSQL Injection + XSS (com {{ }} no Blade)
Node.jsExpress + ORM (Ex: Sequelize)SQL Injection (ORM) + XSS (com template seguro, como Handlebars)
PythonDjangoSQL Injection + XSS (templates escapam tudo)
JavaSpring BootSQL Injection (JPA) + XSS (Thymeleaf escapa)

✅ Resumo final

  • Nunca jogue input do usuário direto em query SQL ou HTML.
  • Use prepared statements no banco.
  • Use escape de HTML nas telas.
  • Frameworks ajudam, mas só se você seguir boas práticas.
Carregando publicação patrocinada...