0Pricing
PHP Academy · Aula

Armazenamento seguro de senhas

Faça hash das senhas com password_hash e verifique-as com password_verify.

Armazenamento seguro de senhas é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.

Nunca armazene senhas em texto simples

Armazenar senhas em texto simples significa que uma violação do banco de dados expõe a senha de cada usuário. Sempre armazene um resumo criptográfico, idealmente bcrypt, Argon2id ou scrypt.

password_hash()

A função password_hash() integrada do PHP cria um resumo criptográfico seguro com um sal aleatório incluído na saída.

<?php
$hash = password_hash("mysecretpassword", PASSWORD_BCRYPT);
// Output: $2y$10$... (includes algorithm, cost, salt, hash)

password_verify()

Verifique uma senha em texto simples em relação a um resumo criptográfico armazenado.

<?php
$hash  = "$2y$10$abcdef...";
$valid = password_verify("mysecretpassword", $hash);
if ($valid) {
    echo "Correct password!";
}

Opções de algoritmo

O PHP é compatível com:

  • PASSWORD_BCRYPT — amplamente compatível, limite de 72 bytes
  • PASSWORD_ARGON2I — exige muita memória (PHP 7.2+)
  • PASSWORD_ARGON2ID — recomendado, resiste a ataques de GPU (PHP 7.3+)
  • PASSWORD_DEFAULT — atualmente bcrypt, mas pode mudar em versões futuras do PHP

Fator de custo

O fator de custo controla a lentidão do cálculo do resumo. Custo maior = ataques de força bruta mais lentos. O custo padrão do bcrypt é 10.

<?php
$hash = password_hash("secret", PASSWORD_BCRYPT, ["cost" => 12]);
// Cost 12 takes ~0.5s on typical hardware — acceptable for login

password_needs_rehash()

Após atualizar o PHP ou alterar as configurações de custo, verifique se os resumos existentes precisam ser atualizados.

<?php
if (password_verify($plain, $storedHash) &&
    password_needs_rehash($storedHash, PASSWORD_DEFAULT)) {
    $user->update(["password" => password_hash($plain, PASSWORD_DEFAULT)]);
}

Fachada Hash do Laravel

O Laravel encapsula password_hash na fachada Hash, usando bcrypt por padrão.

<?php
use Illuminate\Support\Facades\Hash;

$hash  = Hash::make("mysecretpassword");
$valid = Hash::check("mysecretpassword", $hash); // true

Argon2 no Laravel

Configure o Laravel para usar Argon2id em config/hashing.php.

// config/hashing.php
"driver" => "argon2id",

Gerenciamento de sais

As funções modernas de geração de resumos do PHP incluem automaticamente um sal criptograficamente aleatório. Nunca implemente seu próprio sal — é fácil fazê-lo de forma incorreta.

Pimenta (segredo no nível da aplicação)

Um segredo adicional opcional (pimenta), armazenado fora do banco de dados, pode ser misturado antes da geração do resumo. Mesmo que o banco de dados seja roubado, o invasor não conseguirá realizar um ataque de força bruta sem a pimenta.

Comparação em tempo constante

password_verify() usa internamente uma comparação em tempo constante, impedindo ataques de temporização. Nunca compare resumos usando ==.

Resumo

Use password_hash() com PASSWORD_DEFAULT ou PASSWORD_ARGON2ID. Verifique com password_verify(). Gere um novo resumo ao fazer login, se necessário. Nunca armazene texto simples nem use MD5/SHA1 para senhas.

Verificação rápida

Qual função verifica uma senha em relação a um resumo gerado pelo PHP?

Perguntas Frequentes

A aula “Armazenamento seguro de senhas” é grátis?

Sim — o texto completo de “Armazenamento seguro de senhas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.

O que vou aprender em “Armazenamento seguro de senhas”?

Faça hash das senhas com password_hash e verifique-as com password_verify. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar PHP Academy?

Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Armazenamento seguro de senhas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de PHP Academy?

Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Prevenção de Cross-Site Scripting (XSS)
  2. Injeção de SQL e consultas parametrizadas
  3. Proteção contra CSRF
  4. Armazenamento seguro de senhas
← Voltar para PHP Academy