A segurança é um dos aspectos mais críticos no desenvolvimento de aplicações web. Aplicações mal protegidas podem ser alvo de ataques como SQL Injection, Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF) e falhas na autenticação. Neste artigo, abordaremos como mitigar essas vulnerabilidades e fortalecer suas aplicações.
- Como evitar SQL Injection
- Protegendo contra XSS (Cross-Site Scripting)
- Protegendo contra CSRF (Cross-Site Request Forgery)
- Configurando autenticação segura
SQL Injection ocorre quando um atacante insere código SQL malicioso nos campos de entrada para manipular o banco de dados.
Exemplo de código vulnerável (PHP com MySQL)
<?php
$user = $_GET['user'];
$password = $_GET['password'];
$query = "SELECT * FROM users WHERE username = '$user' AND password = '$password'";
$result = mysqli_query($conn, $query);
Se o atacante inserir admin' -- no campo de usuário, a consulta pode ser manipulada para ignorar a senha.
Boas práticas para evitar SQL Injection
Use Prepared Statements e queries parametrizadas:
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $user, $password);
$stmt->execute();
Escape de entradas com mysqli_real_escape_string() (não substitui prepared statements).
Use ORM seguro, como Eloquent (Laravel) ou Prisma (Node.js) ou Hibernate/JPA (Java/Spring/Quarkus).
Restringir permissões do banco de dados para que a aplicação tenha acesso mínimo necessário.
O XSS acontece quando um invasor injeta scripts maliciosos (JavaScript) em páginas web, explorando falhas em formulários ou respostas da aplicação.
Exemplo de vulnerabilidade
Se um campo de comentário não sanitizado aceita <script>alert('Hacked!')</script>
, um atacante pode roubar cookies ou manipular usuários.
Boas práticas para evitar XSS
Escape de saída:
Em HTML: htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
No React: Use {dangerouslySetInnerHTML}
com cautela.
CSP (Content Security Policy) para evitar execução de scripts inline:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'
Sanitização de entrada com bibliotecas como DOMPurify para remover scripts perigosos.
O CSRF permite que um atacante engane o usuário para executar ações não autorizadas em outro site onde está autenticado.
Exemplo de ataque CSRF
Se um usuário estiver autenticado no site banco.com, um atacante pode enganá-lo para acessar:
<img src="https://banco.com/transfer?amount=1000&to=12345">
Se a aplicação não tiver proteção, a transferência pode ser realizada sem o consentimento do usuário.
Como evitar CSRF
Tokens CSRF: Gere um token seguro no backend e exija-o em cada requisição POST/PUT/DELETE:
<input type="hidden" name="csrf_token" value="TOKEN_GERADO">
Header SameSite nos cookies:
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Strict
Verifique o Referer e Origin nas requisições para validar se vêm do domínio correto.
Boas práticas para autenticação em APIs
Use JWT (JSON Web Token) com expiração curta e refresh tokens:
Armazene hashes de senhas usando bcrypt ou Argon2 em vez de MD5/SHA1.
</?php
$hash = password_hash("senha123", PASSWORD_BCRYPT);
Exija MFA (autenticação de dois fatores) para aumentar a segurança.
Limite tentativas de login com fail2ban ou um rate limiter na aplicação e na API.
Implemente OAuth 2.0 para autenticação em terceiros.
Considerações finais
Segurança nunca deve ser um pensamento secundário no desenvolvimento web. Implementando as práticas acima, você fortalece sua aplicação contra ataques comuns e protege seus usuários.
Compartilhe com sua equipe e aplique essas dicas no seu projeto!
Feito!
Nenhum comentário:
Postar um comentário