Segurança em Aplicações Web
Aplicações web modernas enfrentam inúmeras ameaças. Identificar e corrigir vulnerabilidades é essencial para proteger dados e usuários.
$ Injeção SQL (SQLi)
$ Cross-Site Scripting (XSS)
$ Cross-Site Request Forgery (CSRF)
$ Quebra de autenticação
$ Proteção de dados sensíveis
$ Conformidade com LGPD/GDPR
$ Confiança dos usuários
$ Redução de custos com incidentes
OWASP Top 10 Vulnerabilidades
| # | Vulnerabilidade | Risco | Exemplo | Prevenção |
|---|---|---|---|---|
| 1 | Injeção SQL | Crítico | SELECT * FROM users WHERE username = 'admin'--' AND password = '' | Prepared statements, ORMs, sanitização |
| 2 | Quebra de Autenticação | Crítico | Senhas fracas, sessões não invalidadas | MFA, hash forte, timeout de sessão |
| 3 | Exposição de Dados Sensíveis | Alto | Dados não criptografados, logs com informações sensíveis | Criptografia, data masking, headers de segurança |
| 4 | Entidades Externas XML (XXE) | Alto | Injeção de entidades XML maliciosas | Desativar processamento de entidades externas |
| 5 | Quebra de Controle de Acesso | Alto | Acesso não autorizado a funções administrativas | Princípio do menor privilégio, RBAC |
| 6 | Configuração Incorreta de Segurança | Médio | Configurações padrão, mensagens de erro detalhadas | Hardening, revisão de configurações |
| 7 | Cross-Site Scripting (XSS) | Alto | <script>alert('XSS')</script> | Escape de output, CSP, sanitização |
| 8 | Desserialização Insegura | Alto | Objetos serializados maliciosos | Validação estrita, evitar desserialização |
| 9 | Componentes Vulneráveis | Médio | Bibliotecas desatualizadas com vulnerabilidades conhecidas | Gestão de dependências, atualizações |
| 10 | Log e Monitoramento Insuficientes | Médio | Falta de detecção de atividades suspeitas | Logs centralizados, SIEM, alertas |
Injeção SQL (SQLi)
Identificação e Prevenção de SQLi
Vulnerabilidade
A injeção SQL ocorre quando um atacante consegue inserir comandos SQL maliciosos em campos de entrada, permitindo acesso não autorizado a dados.
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
// Ataque: username = admin'--
// Query resultante:
SELECT * FROM users WHERE username='admin'--' AND password=''
Prevenção
- Usar prepared statements com parâmetros
- Utilizar ORMs (Object-Relational Mapping)
- Validar e sanitizar todas as entradas
- Princípio do menor privilégio para contas de banco de dados
$stmt = $pdo->prepare("SELECT * FROM users WHERE username=:username AND password=:password");
$stmt->execute([
'username' => $_POST['username'],
'password' => $_POST['password']
]);
$user = $stmt->fetch();
Cross-Site Scripting (XSS)
Tipos de XSS e Mitigação
Tipos de XSS
XSS permite que atacantes injetem scripts maliciosos que são executados no navegador das vítimas.
<script>stealCookies()</script>
// XSS Refletido (não persistente)
http://site.com/search?q=<script>alert(1)</script>
// DOM-based XSS
document.write('<img src="'+location.hash.substr(1)+'">');
Prevenção
- Escapar dados antes de exibi-los (htmlspecialchars em PHP)
- Implementar Content Security Policy (CSP)
- Validar e sanitizar todas as entradas
- Usar headers de segurança como X-XSS-Protection
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// Configurando CSP header
header("Content-Security-Policy: default-src 'self'; script-src 'self'");
// Sanitizando input
$cleanInput = filter_input(INPUT_GET, 'q', FILTER_SANITIZE_STRING);
Cross-Site Request Forgery (CSRF)
Proteção Contra CSRF
Ataque CSRF
CSRF força um usuário autenticado a executar ações indesejadas em um aplicativo web sem seu conhecimento.
// Se o usuário estiver autenticado no banco,
// a transferência será executada sem seu conhecimento
Prevenção
- Implementar tokens CSRF (Synchronizer Token Pattern)
- Usar SameSite cookies
- Validar origem (Origin/Referer headers)
- Exigir confirmação para ações críticas
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// Incluindo token no formulário
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
// Validando token na submissão
if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
die('CSRF token validation failed');
}
Headers de Segurança
Configurações Recomendadas
Problemas
Configurações padrão de servidores podem expor informações sensíveis ou permitir comportamentos inseguros.
Server: Apache/2.4.6 (CentOS)
X-Powered-By: PHP/5.6.40
Access-Control-Allow-Origin: *
# Informações expostas e CORS inseguro
Configurações Recomendadas
- Implementar headers de segurança modernos
- Remover headers que expõem informações do servidor
- Configurar políticas de CORS restritivas
- Forçar HTTPS e HSTS
Content-Security-Policy: default-src 'self'
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
Ferramentas de Análise
OWASP ZAP
Scanner automatizado para encontrar vulnerabilidades em aplicações web
Burp Suite
Plataforma completa para teste de segurança em aplicações web
SonarQube
Análise estática de código para identificar vulnerabilidades
Fluxo de Correção
Identificação
Utilizar ferramentas automatizadas e revisão manual para identificar vulnerabilidades
Priorização
Classificar vulnerabilidades por criticidade (CVSS) e impacto no negócio
Correção
Implementar soluções técnicas para cada vulnerabilidade identificada
Validação
Testar as correções para garantir que as vulnerabilidades foram resolvidas