# Aħżen il-passwords f'PHP b'mod sigur: kif tuża password_hash sewwa

> Aħżen il-passwords f'PHP b'mod sigur b'password_hash: bcrypt jew Argon2id, fattur tal-ispiża, limitu ta' 72 byte u bidla minn hashes qodma ta' MD5.

Sors: https://phpsos.de/mt/blog/passwoerter-in-php-speichern/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**Fil-qosor:** Il-passwords taħżnuhom f'PHP b'`password_hash()` u tivverifikawhom b'`password_verify()`. Il-valur awtomatiku `PASSWORD_DEFAULT` bħalissa juża bcrypt, minn PHP 8.4 b'fattur tal-ispiża 12; fejn PHP huwa kkumpilat b'Argon2, `PASSWORD_ARGON2ID` hija alternattiva tajba. Hashes qodma ta' MD5 jew SHA-1 tibdluhom billi tgħatuhom minnufih ġo password_hash u tissostitwuhom, fil-login li jmiss, b'hash dirett.

## X'għandu x'jaqsam it-tnixxija tad-database mal-hashes tagħkom

Wara dħul f'web server, id-database hija waħda mill-ewwel miri. Min jista' jesegwixxi kodiċi fuq is-server, kif hu possibbli b'PHP2Shell, jaqra wkoll id-dettalji tal-aċċess tal-applikazzjoni u b'hekk it-tabella tal-kontijiet tal-utenti. Jekk il-passwords fiha jsiru leġġibbli wara sigħat jew wara snin, dan ma jiddeċiedix fil-jum tal-attakk, imma waqt il-programmar.

Sorprendentement ħafna applikazzjonijiet għadhom jaħżnu l-passwords b'proċeduri li qatt ma kienu maħsuba għal dan l-iskop: MD5, SHA-1, SHA-256 sempliċi jew saħansitra ċċifrati b'mod riversibbli. Dawn il-proċeduri huma mgħaġġla, u eżattament dan huwa l-problema. L-attakkanti jistgħu b'hekk jippruvaw ħafna kandidati kull sekonda.

PHP għandu żmien twil li jġib soluzzjoni li tikkalkula bil-mod, toħloq awtomatikament salt għal kull password u taħżen il-proċedura u l-parametri fl-hash stess. Trid sempliċement tużawha b'mod konsistenti.

## password_hash f'PHP: bcrypt jew Argon2id?

`password_hash()` jaf diversi proċeduri. L-għażla skont il-manwal ta' PHP:

| Kostanti | Proċedura | Nota |
|---|---|---|
| `PASSWORD_DEFAULT` | bħalissa bcrypt | Valur awtomatiku, jista' jinbidel f'verżjonijiet futuri |
| `PASSWORD_BCRYPT` | bcrypt | Fattur tal-ispiża minn PHP 8.4 b'mod awtomatiku 12, qabel 10; jgħoddu biss l-ewwel 72 byte |
| `PASSWORD_ARGON2I` | Argon2i | minn PHP 7.2, biss jekk PHP inbena b'appoġġ għal Argon2 |
| `PASSWORD_ARGON2ID` | Argon2id | minn PHP 7.3, l-istess prerekwiżit |

OWASP jirrakkomanda Argon2id bħala l-ewwel għażla, b'mill-inqas 19 MiB ta' memorja, żewġ passaġġi u thread wieħed, u bcrypt l-aktar għal sistemi eżistenti. Għall-biċċa l-kbira tal-applikazzjonijiet PHP id-differenza fil-prattika hija iżgħar mid-differenza bejn kwalunkwe waħda minn dawn il-proċeduri u MD5. L-aktar importanti huwa li tużaw waħda minnhom u li tadattaw il-parametri regolarment.

Jekk Argon2id hux disponibbli jurih test qasir:

```php
<?php
var_dump(defined('PASSWORD_ARGON2ID'));
var_dump(password_algos());
```

## Aħżen u ivverifika: mudell komplut

L-eżempju li ġej juri r-reġistrazzjoni u l-login b'aġġornament awtomatiku ta' hashes skaduti. Il-verifika tat-tul tipproteġi mil-limitu ta' 72 byte ta' bcrypt:

```php
<?php
declare(strict_types=1);

const PASSWORT_ALGO = PASSWORD_DEFAULT;

function passwortSpeichern(string $passwort): string
{
    if (strlen($passwort) > 72) {
        throw new InvalidArgumentException('Passwort zu lang für das gewählte Verfahren.');
    }
    return password_hash($passwort, PASSWORT_ALGO);
}

function passwortPruefen(string $eingabe, string $gespeicherterHash, callable $hashAktualisieren): bool
{
    if (!password_verify($eingabe, $gespeicherterHash)) {
        return false;
    }
    if (password_needs_rehash($gespeicherterHash, PASSWORT_ALGO)) {
        $hashAktualisieren(password_hash($eingabe, PASSWORT_ALGO));
    }
    return true;
}
```

`strlen()` jgħodd byte, mhux karattri. Dan hawnhekk huwa intenzjonat, għax il-limitu ta' bcrypt jirreferi għal byte. Il-kolonna fid-database għandha, skont il-manwal, tkun tista' żżomm aktar minn 60 karattru, 255 huwa għażla tajba. Qatt ma twaqqfu salt proprju: l-għażla hija skaduta u minn PHP 8.0 tiġi injorata.

Mal-bidla għal PHP 8.4 il-fattur tal-ispiża awtomatiku għal bcrypt jogħla minn 10 għal 12. Hashes eżistenti, grazzi għal `password_needs_rehash()`, jiżdiedu awtomatikament fil-login li jmiss. Fuq sistemi mgħobbija ħafna jixraq qabel il-bidla test qasir tat-tagħbija tal-login.

> **Suġġeriment:**
> Ikkalkulaw il-fattur tal-ispiża fuq is-server tal-produzzjoni tagħkom. Verifika waħda għandha tieħu ħin ta' kalkolu apprezzabbli, imma tibqa' b'mod ċar taħt sekonda, biex il-logins ma jsirux konġestjoni meta jkun hemm tagħbija.

## Neħħu hashes qodma ta' MD5 u SHA-1

L-isfida vera hija ġeneralment l-istokk eżistenti. Il-passwords stess ma tafuhomx, allura ma tistgħux sempliċement terġgħu tagħmluhom hash. Li tistennew sakemm kull utent jerġa' jidħol iħalli kontijiet inattivi mhux protetti. OWASP għalhekk jiddeskrivi proċedura f'żewġ stadji:

1. **Daħħlu minnufih:** Kull valur eżistenti ta' MD5 jew SHA-1 agħmluh b'skript ġo `password_hash()` u aħżnuh b'marka, pereżempju f'kolonna `hash_typ`.
2. **Ivverifikaw fil-login:** Għall-kontijiet immarkati l-ewwel ikkalkulaw l-input bil-proċedura l-qadima u mbagħad ivverifikaw b'`password_verify()` kontra l-valur ippakkjat.
3. **Issostitwixxu direttament:** Wara login b'suċċess oħolqu hash normali mit-test ċar u neħħu l-marka.
4. **Naddfu l-bqija:** Kontijiet li wara terminu stabbilit għad għandhom hashes ippakkjati, poġġuhom fuq reset tal-password.

```php
<?php
// Stadju 1 (darba b'skript): $neu = password_hash($alterMd5Wert, PASSWORD_DEFAULT);
// Stadju 2 u 3 fil-login:
if ($konto['hash_typ'] === 'md5-umhuellt') {
    $ok = password_verify(md5($eingabe), $konto['passwort_hash']);
    if ($ok) {
        $speichere(password_hash($eingabe, PASSWORD_DEFAULT), 'direkt');
    }
}
```

Hashes ippakkjati huma aħjar minn valuri xotti ta' MD5, imma aktar dgħajfa minn hashes diretti. Huma soluzzjoni ta' tranżizzjoni, mhux għan. Wara inċident li fih id-database tista' tkun affettwata, din il-bidla ma tissostitwix it-talba lill-utenti biex ibiddlu l-passwords tagħhom. Liema traċċi jindikaw inċident bħal dan jiddeskrivi [Diġà kompromess?](https://phpsos.de/mt/php2shell/bin-ich-gehackt-anzeichen/).

## Pepper, ċifrar u mogħdijiet żbaljati oħra

Xi ideat jinstemgħu bħala aktar sigurtà, imma jġibu ftit jew jagħmlu ħsara:

- **Kostruzzjonijiet proprji ta' hash** bħal SHA-256 b'ripetizzjonijiet b'salt iġġenerat minnkom huma aktar mgħaġġla minn bcrypt u għalhekk aktar dgħajfa.
- **Passwords ċċifrati** huma riversibbli. Jekk iċ-ċavetta tinsab fuq l-istess server, iċ-ċifrar wara dħul bilkemm jipproteġi.
- **Pepper**, jiġifieri valur sigriet addizzjonali għall-passwords kollha, jista' jkun saff addizzjonali jekk jinżamm separat mid-database. Imma ma jissostitwix proċedura tajba ta' hash u jagħmel bidliet futuri aktar diffiċli.
- **Pre-hashing qabel bcrypt**, biex jiġi evitat il-limitu ta' 72 byte, iġorr, skont OWASP, riskji proprji. Limitu ċar tat-tul jew Argon2id huwa aktar sempliċi.

Anke fir-regoli għal passwords ġodda jixraq li titfgħu ħarsa lejn l-istat tat-teknika: it-tul jipproteġi aktar minn rekwiżiti kumplessi dwar karattri speċjali, u passwords komuni ħafna jew li diġà dehru fi tnixxijiet tad-data għandhom jiġu miċħuda. Bidliet furzati f'intervalli fissi mingħajr motiv, skont l-esperjenza, iwasslu aktar għal mudelli prevedibbli milli għal passwords aktar b'saħħithom.

Għal sistemi ta' login il-passwords ma jibqgħux qatt waħedhom: proċeduri b'żewġ fatturi għall-admins u brejk kontra tentattivi massivi ta' login jissupplimentaw l-ħażna. It-tnejn jittrattahom il-gwida [Ipproteġi l-logins tal-admin minn brute force](https://phpsos.de/mt/ratgeber/brute-force-login-schutz/). Għal links ta' reset u kodiċijiet ta' darba japplikaw regoli oħra, ara [Numri każwali u tokens sikuri f'PHP](https://phpsos.de/mt/blog/sichere-tokens-php/). Ħarsa ġenerali lejn funzjonijiet oħra tagħti [Funzjonijiet ta' sigurtà inkorporati ta' PHP](https://phpsos.de/mt/php/eingebaute-sicherheitsfunktionen/).

## Kif tgħin PHP SOS b'mod konkret?

- Niċċekkjaw kif l-applikazzjoni u l-plugins tagħkom jaħżnu l-passwords u nsibu proċeduri skaduti anke f'funzjonijiet sekondarji.
- Nippjanaw il-bidla tal-istokk b'ippakkjar, migrazzjoni fil-login u terminu għall-kontijiet li jifdal.
- Nadattaw il-fattur tal-ispiża jew il-parametri ta' Argon2 għas-servers tagħkom.
- Wara inċident insostnu d-deċiżjoni dwar resets tal-password u l-implimentazzjoni teknika tagħhom.

Verifika tas-softwer PHP proprju noffruha bħala [Awditu tas-sigurtà u test ta' penetrazzjoni](https://phpsos.de/mt/leistungen/sicherheitsaudit-penetrationstest/).


## Mistoqsijiet frekwenti

**Liema algoritmu juża password_hash b'PASSWORD_DEFAULT?**  
Bħalissa bcrypt. Il-manwal ta' PHP jindika li l-valur awtomatiku jista' jinbidel meta jiżdiedu proċeduri aktar b'saħħithom. Għalhekk il-kolonna tad-database għandha tkun tista' żżomm aktar minn 60 karattru; il-manwal isemmi 255 bħala għażla tajba.

**Għandi niċċifra l-passwords minflok nagħmilhom hash?**  
Le. Passwords iċċifrati jistgħu jinqraw mill-ġdid biċ-ċavetta, u din iċ-ċavetta spiss tinsab fuq l-istess server. Hash ta' password huwa triq f'direzzjoni waħda: l-applikazzjoni tista' biss tivverifika jekk input jaqbilx.

**Kemm għandu jkun għoli l-fattur tal-ispiża f'bcrypt?**  
Minn PHP 8.4 il-valur awtomatiku huwa 12, qabel 10. OWASP isemmi 10 bħala l-limitu l-aktar baxx u jirrakkomanda li tgħollu daqs kemm jifilħu s-servers tagħkom. Ikkalkulaw fuq il-hardware proprju kemm idum jieħu verifika waħda.

**X'tfisser il-limitu ta' 72 byte f'bcrypt?**  
bcrypt jikkunsidra biss l-ewwel 72 byte ta' password, dak li jiġi wara jinqata'. Fil-każ ta' karattri speċjali, karattru wieħed spiss jgħodd żewġ byte. Illimitaw it-tul b'mod espliċitu jew uża Argon2id jekk PHP tagħkom huwa kkumpilat miegħu.

**L-utenti jridu jbiddlu l-passwords wara dħul?**  
Jekk ma jistax jiġi eskluż li d-database ħarġet, għandkom tirranġaw dan. Hashes tajbin inaqqsu b'mod konsiderevoli l-qsim, imma passwords dgħajfa jibqgħu vulnerabbli. Jekk teżistix barra minn hekk obbligu ta' notifika, iċċaruh mal-uffiċjal tal-protezzjoni tad-data tagħkom.

## Sorsi

- [Manwal ta' PHP: password_hash](https://www.php.net/manual/de/function.password-hash.php)
- [OWASP Password Storage Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
