← PHP para aplicações reais
04 / 11 · 23 MIN

Segurança na fronteira web

Trata palavras-passe, saída HTML e erros com cuidado.

Guardar palavras-passe

Usa password_hash e password_verify em vez de guardar a palavra-passe ou um hash rápido simples. Aplica limites a tentativas de autenticação, protege cookies de sessão e invalida sessões quando é necessário. A ligação HTTPS protege dados em trânsito.

Apresentar dados externos

Ao inserir texto do utilizador em HTML, codifica-o para esse contexto, por exemplo com htmlspecialchars. Não mostres stack traces nem detalhes da base de dados numa página pública. Regista informação operacional suficiente num canal reservado e apresenta uma mensagem útil ao utilizador.

Aplicação guiada no trabalho

Numa página de perfil, o nome deve aparecer como texto dentro de um parágrafo. Aplica htmlspecialchars com flags e codificação explícitas nesse ponto de saída; não assumes que guardar por PDO torna a string segura para qualquer contexto. JavaScript, CSS e URLs têm outras regras, e a opção mais simples costuma ser evitar concatenar dados em código executável. Para autenticação, verifica a palavra-passe com password_verify e o hash guardado. Dois password_hash da mesma entrada podem diferir por causa do salt, pelo que não devem ser comparados literalmente para autenticar. Depois de verificar com sucesso, password_needs_rehash permite decidir uma atualização dos parâmetros. Em falhas, devolve uma mensagem apropriada com referência e mantém diagnóstico sanitizado em registos com acesso controlado.

$safeName = htmlspecialchars(
    $name, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8"
);
echo "<p>" . $safeName . "</p>";
NA PRÁTICA

Um nome contém caracteres de HTML. A página deve mostrar esse texto como dados e não executá-lo como marcação ou script.

Armadilhas comuns

Comparar hashes gerados de novo; aplicar codificação HTML a qualquer contexto; expor diagnóstico interno.

Tópicos relacionados: Transações e falhas parciais em PDO · HTTP, sessões e autorização por recurso

Leva esta ideia contigo

Protege credenciais, codifica a saída no contexto correto e limita a exposição de erros.

Criar conta

Referência: PHP manual: htmlspecialchars · PHP 8.5 reference; DR PHP 2026.3; new fixtures executed on PHP 8.4.4 / SQLite 3.51.2