23 de março de 2025
A segurança em aplicações web é um tópico crítico para desenvolvedores, empresas e usuários finais. Com o aumento de ataques cibernéticos, proteger sua aplicação não é mais uma opção, mas uma necessidade. Neste post, vamos explorar boas práticas de segurança que você pode implementar para proteger sua aplicação web de vulnerabilidades comuns.
A injeção de SQL ocorre quando um atacante insere comandos SQL maliciosos em campos de entrada, manipulando o banco de dados da aplicação.
Use consultas parametrizadas ou ORM (Object-Relational Mapping) para evitar a execução de comandos SQL não sanitizados.
# Ruim (vulnerável a SQL injection) query = "SELECT * FROM users WHERE username = '" + username + "';" # Bom (usando consultas parametrizadas) query = "SELECT * FROM users WHERE username = %s;" cursor.execute(query, (username,))
Entradas de usuário não validadas podem levar a vulnerabilidades como XSS (Cross-Site Scripting) e injeção de código.
Sempre valide e sanitize dados de entrada no lado do servidor. Use bibliotecas de validação e escape de caracteres especiais.
// Validando um e-mail function validateEmail(email) { const regex = /^[^s@]+@[^s@]+.[^s@]+$/; return regex.test(email); } // Sanitizando HTML para evitar XSS const sanitizeHTML = (str) => { return str.replace(/</g, "<").replace(/>/g, ">"); };
XSS ocorre quando um atacante injeta scripts maliciosos em páginas web, que são executados no navegador de outros usuários.
Use Content Security Policy (CSP) e escape dados renderizados no frontend.
<!-- Configurando CSP no cabeçalho HTTP --> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://apis.google.com;">
HTTP não criptografado permite que atacantes interceptem dados sensíveis, como senhas e informações de cartão de crédito.
Configure seu servidor para usar HTTPS, que criptografa a comunicação entre o cliente e o servidor.
Obtenha um certificado SSL/TLS (gratuito com Let's Encrypt).
Configure redirecionamento de HTTP para HTTPS.
server { listen 80; server_name exemplo.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name exemplo.com; ssl_certificate /caminho/para/certificado.crt; ssl_certificate_key /caminho/para/chave-privada.key; }
Autenticação vulnerável pode permitir que atacantes acessem contas de usuários.
Use hash com salt para senhas (ex: bcrypt, Argon2).
Implemente autenticação de dois fatores (2FA).
Limite tentativas de login para prevenir ataques de força bruta.
const bcrypt = require('bcrypt'); const saltRounds = 10; // Hash da senha bcrypt.hash('senha123', saltRounds, (err, hash) => { // Armazene o hash no banco de dados }); // Verificação da senha bcrypt.compare('senha123', hash, (err, result) => { if (result) { // Senha correta } else { // Senha incorreta } });
CSRF ocorre quando um atacante envia solicitações maliciosas em nome de um usuário autenticado.
Use tokens CSRF para garantir que as solicitações venham de fontes confiáveis.
<form action="/update-profile" method="POST"> <input type="hidden" name="_csrf" value="<%= csrfToken %>"> <input type="text" name="username"> <button type="submit">Atualizar</button> </form>
Bibliotecas e frameworks desatualizados podem conter vulnerabilidades conhecidas.
Use ferramentas como npm audit ou Dependabot para identificar e corrigir vulnerabilidades em dependências.
npm audit npm audit fix
Dados como senhas, tokens e informações de cartão de crédito devem ser protegidos.
Nunca armazene senhas em texto.
Use criptografia para dados sensíveis.
Restrinja o acesso a logs e backups.
const crypto = require('crypto'); const algorithm = 'aes-256-cbc'; const key = crypto.randomBytes(32); const iv = crypto.randomBytes(16); function encrypt(text) { let cipher = crypto.createCipheriv(algorithm, Buffer.from(key), iv); let encrypted = cipher.update(text); encrypted = Buffer.concat([encrypted, cipher.final()]); return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex') }; }
Monitoramento ajuda a detectar e responder a ataques em tempo real.
Use ferramentas de monitoramento e logging para rastrear atividades suspeitas, como múltiplas tentativas de login falhas.
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }), ], }); logger.error('Tentativa de login falha para o usuário admin');
A segurança em aplicações web é um processo contínuo que requer atenção constante. Ao seguir essas boas práticas, você pode proteger sua aplicação contra vulnerabilidades comuns e garantir a segurança dos dados dos usuários.
Se você gostou deste post, compartilhe com seus amigos. E não se esqueça de explorar outros tutoriais aqui no blog para continuar aprendendo!
E aí, pronto para tornar sua aplicação mais segura?
Visualizações: 256
02 de maio de 2025
05 de abril de 2025
18 de março de 2025
14 de março de 2025
27 de fevereiro de 2025
05 de abril de 2016