Angola e Portugal · todas as cidades Subdomínios em perfilvia.com
Programação e informática

Segurança web básica para programadores: XSS, SQL Injection e mais

Conhece as vulnerabilidades web mais comuns (XSS, SQL Injection, CSRF), como se evitam e boas práticas para palavras-passe, formulários e uploads.

· 4 min de leitura · Equipa Comunidade Sempre Online

Ilustração sobre segurança web básica – guia do blog Comunidade Sempre Online

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.

Imagem de apoio do guia: Segurança web básica para programadores: XSS, SQL Injection e mais

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 textContent em vez de innerHTML para 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=Lax ou Strict.

4. Palavras-passe

  • Nunca guardes palavras-passe em texto simples. Usa algoritmos próprios: password_hash e password_verify em PHP, bcrypt ou argon2 noutras 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ê) e Secure (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

  1. Escapo tudo o que mostro?
  2. Uso consultas preparadas?
  3. Os formulários têm token CSRF?
  4. As palavras-passe estão com hash forte?
  5. O site usa HTTPS e cookies seguros?
  6. Os uploads são validados e não executáveis?
  7. Os segredos estão fora do código?
  8. 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.

Se quiseres ajuda

Podemos fazer isto contigo.

Ver todos os serviços
Fala connosco

Tens uma dúvida sobre este tema?

Escreve-nos pelo WhatsApp e respondemos com preço, disponibilidade e prazo, se precisares de um serviço.

Falar no WhatsApp
Todo o projeto tem um orçamento. O valor final é confirmado conforme o serviço.
WhatsApp · Falar agora