Site icon

password_compat: porta password_hash su PHP 5.3/5.4 (guida pratica e sicura)

Verifica della password con password_verify in ambiente PHP 5.3/5.4

Verifica della password con password_verify in ambiente PHP 5.3/5.4

password_compat è la libreria ufficiale pensata per portare le funzioni

password_hash(), password_verify() e password_needs_rehash() nei progetti che girano su versioni di PHP precedenti alla 5.5 (in particolare 5.3/5.4). In questo articolo vediamo requisiti, installazione, esempi d’uso e best practice per integrare l’hashing BCRYPT in modo sicuro anche su ambienti legacy.

Requisiti e compatibilità

Avviso: su versioni non supportate, la creazione o verifica degli hash può restituire false. Per motivi di sicurezza (vecchie vulnerabilità BCRYPT), è consigliato aggiornare a PHP recenti quando possibile.

Installazione

Metodo rapido (senza Composer)

  1. Scarica la libreria e includi lib/password.php.
  2. Richiama il file dove ti serve usare le funzioni password_*.

Schema di hashing BCRYPT con password_compat

<?php
require_once __DIR__ . '/lib/password.php'; // polyfill password_* per PHP < 5.5

Installazione via Composer

In alternativa, puoi installare il pacchetto da Packagist e lasciar gestire l’autoload a Composer.

Uso: esempi pratici

Creare hash di password

<?php
$hash = password_hash($password, PASSWORD_BCRYPT);

// con cost personalizzato (valori 4–31; punta a 0.1–0.5s di tempo):
$hash = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));

// oppure l'alias "sempre il più forte disponibile":
$hash = password_hash($password, PASSWORD_DEFAULT);

Importante: verifica sempre il valore di ritorno prima di salvarlo (in caso di errore può essere false o null). Se usi PASSWORD_DEFAULT, prevedi una colonna VARCHAR(255) per evitare troncamenti futuri quando l’algoritmo predefinito dovesse cambiare.

Verificare una password

<?php
if (password_verify($password, $hash)) {
    // password valida
} else {
    // password non valida
}

Rehash quando cambiano i parametri

<?php
if (password_verify($password, $hash)) {
    if (password_needs_rehash($hash, PASSWORD_BCRYPT, array('cost' => 12))) {
        $hash = password_hash($password, PASSWORD_BCRYPT, array('cost' => 12));
        // salva il nuovo hash nel database
    }
}

Best practice di sicurezza

FAQ rapide

Quale valore usare per cost?

Non esiste un numero “magico”: aumenta il cost finché l’operazione di hashing impiega circa 100–500 ms sul tuo server di produzione. Così ottieni un buon equilibrio tra sicurezza e performance.

Cosa succede se resto su una versione non supportata?

La libreria può rifiutarsi di creare/verificare hash e restituire false. È un comportamento intenzionale per non esporre il progetto a implementazioni BCRYPT vulnerabili. Aggiorna PHP appena possibile.

Esempio di codice PHP con password_hash e cost personalizzato

Posso mescolare hash vecchi e nuovi?

Sì. Mantieni i vecchi hash finché gli utenti non effettuano il login; in quel momento, dopo password_verify(), esegui un rehash con i nuovi parametri e salva l’hash aggiornato.

Conclusioni

password_compat è una soluzione affidabile per portare le API moderne di gestione password nei progetti PHP 5.3/5.4. Ti consente di usare password_hash(), password_verify() e
password_needs_rehash() in modo coerente, mantenendo uno standard di sicurezza elevato in attesa dell’upgrade dell’ambiente. Integra la libreria, verifica i requisiti, imposta un cost adeguato e pianifica l’aggiornamento a una versione di PHP recente.

Aggiorna sempre le dipendenze e monitora le note di sicurezza: la protezione delle password è un processo, non un’azione singola.

Exit mobile version