Cada formulário, cada ligação e cada ficheiro enviado por um utilizador é uma possível porta de entrada. Muitos ataques a sites não são sofisticados: aproveitam erros básicos que um programador atento evita. Este guia apresenta as vulnerabilidades mais comuns e como preveni-las. É para fins defensivos: aprender a proteger o que constróis.
Regra de ouro: nunca confies nos dados do utilizador
Tudo o que chega de fora (formulários, parâmetros no endereço, cookies, ficheiros, cabeçalhos) pode ser manipulado. Valida o que entra e escapa o que sai.

1. XSS (Cross-Site Scripting)
O problema: mostras na página texto escrito por um utilizador sem o tratar, e esse texto contém código JavaScript que corre no navegador de outras pessoas.
Como prevenir:
- Escapa sempre o texto antes de o mostrar. Em PHP,
htmlspecialchars($texto, ENT_QUOTES, 'UTF-8'). - Em JavaScript, usa
textContentem vez deinnerHTMLpara texto simples. - Define uma Content-Security-Policy que restrinja de onde os scripts podem vir.
2. SQL Injection
O problema: juntas texto do utilizador diretamente numa consulta SQL, e quem escreve o texto altera o sentido da consulta.
Como prevenir: usa consultas preparadas.
$stmt = $pdo->prepare("SELECT * FROM utilizadores WHERE email = ?");
$stmt->execute([$email]);Nunca montes consultas com "... WHERE email = '" . $email . "'". Aprende as bases em SQL para iniciantes.
3. CSRF (Cross-Site Request Forgery)
O problema: um site malicioso faz o navegador de um utilizador autenticado enviar um pedido ao teu site (por exemplo, mudar o email) sem ele querer.
Como prevenir:
- Gera um token aleatório por sessão, coloca-o em cada formulário que altera dados e verifica-o no servidor.
- Usa cookies de sessão com
SameSite=LaxouStrict.
4. Palavras-passe
- Nunca guardes palavras-passe em texto simples. Usa algoritmos próprios:
password_hashepassword_verifyem PHP,bcryptouargon2noutras linguagens. - Exige um comprimento mínimo (12 caracteres ou mais) em vez de regras absurdas.
- Limita as tentativas de login para travar ataques de adivinhação.
- Oferece autenticação em dois passos quando possível.
5. Sessões e cookies
- Marca os cookies de sessão com
HttpOnly(o JavaScript não os lê) eSecure(só HTTPS). - Regenera o identificador da sessão depois do login.
- Define um tempo de expiração.
6. Uploads de ficheiros
Receber ficheiros é perigoso. Boas práticas:
- Aceita só os tipos de que precisas (por exemplo, JPG, PNG, WebP) e verifica o conteúdo real, não só a extensão.
- Re-processa as imagens (por exemplo, converter para WebP) para eliminar conteúdo escondido.
- Guarda com nomes aleatórios, numa pasta onde nada é executado.
- Limita o tamanho.
7. HTTPS em todo o lado
Sem HTTPS, tudo o que o utilizador envia pode ser lido por terceiros em redes inseguras. Vê o que é HTTPS e certificado SSL.
8. Segredos fora do código
Chaves de API, palavras-passe de base de dados e tokens não devem ir para o GitHub. Guarda-os em variáveis de ambiente ou em ficheiros fora do repositório e fora da pasta pública. Se uma chave vazar, revoga-a de imediato.
9. Manter tudo atualizado
Versões antigas de PHP, bibliotecas e sistemas de gestão de conteúdos têm falhas conhecidas. Atualiza com regularidade e remove o que não usas.
10. Cópias de segurança
Mesmo com tudo bem feito, algo pode correr mal. Faz cópias regulares e testa o restauro. Podemos ajudar com cópias de segurança e proteção de sites.
Lista de verificação rápida
- Escapo tudo o que mostro?
- Uso consultas preparadas?
- Os formulários têm token CSRF?
- As palavras-passe estão com hash forte?
- O site usa HTTPS e cookies seguros?
- Os uploads são validados e não executáveis?
- Os segredos estão fora do código?
- Tudo está atualizado e com cópia de segurança?
Perguntas frequentes
Que vulnerabilidade é a mais comum?
XSS e falhas de controlo de acesso estão entre as mais frequentes, seguidas de SQL Injection em código antigo.
Frameworks resolvem tudo?
Ajudam muito (muitas já escapam dados e protegem contra CSRF), mas só se as usares corretamente. Continua a ser preciso perceber o que acontece.
Onde posso praticar segurança de forma legal?
Em laboratórios criados para esse fim, como aplicações propositadamente vulneráveis que corres no teu computador. Nunca testes sistemas de terceiros sem autorização.




