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>";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
Protege credenciais, codifica a saída no contexto correto e limita a exposição de erros.
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