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: 42
18 de março de 2025
14 de março de 2025
27 de fevereiro de 2025
05 de abril de 2016