# Pasfhocail a stóráil go slán i PHP: password_hash a úsáid i gceart

> Pasfhocail a stóráil go slán i PHP le password_hash: bcrypt nó Argon2id, fachtóir costais, teorainn 72 bheart agus aistriú ó sheanhashanna MD5.

Foinse: https://phpsos.de/ga/blog/passwoerter-in-php-speichern/  
Staid: 25/10/2026  
Soláthraí: PHP SOS, Cabhair éigeandála PHP agus slándáil freastalaí. Cabhair láithreach trí WhatsApp: https://wa.me/491736494914?text=Dia%20duit%2C%20a%20PHP%20SOS%2C%20t%C3%A1%20cabhair%20de%20dh%C3%ADth%20orainn%20len%C3%A1r%20bhfreastala%C3%AD%20PHP.%20Cuideachta%3A%20%E2%80%A6%20Su%C3%ADomh%20gr%C3%A9as%C3%A1in%3A%20%E2%80%A6

**Go achomair:** Stórálann tú pasfhocail i PHP le `password_hash()` agus seiceálann tú iad le `password_verify()`. Úsáideann an réamhshocrú `PASSWORD_DEFAULT` bcrypt faoi láthair, ó PHP 8.4 le fachtóir costais 12; san áit a bhfuil PHP tiomsaithe le Argon2, is rogha mhaith eile é `PASSWORD_ARGON2ID`. Aistríonn tú seanhashanna MD5 nó SHA-1 trína gcur isteach láithreach i password_hash agus iad a chur in ionad hash díreach ag an gcéad logáil isteach eile.

## Cad atá ag sceitheadh bunachair sonraí le do hashanna a dhéanamh

Tar éis briseadh isteach i bhfreastalaí gréasáin, tá an bunachar sonraí ar na chéad sprioc. An té atá in ann cód a rith ar an bhfreastalaí, mar atá indéanta le PHP2Shell, léann sé sonraí rochtana an fheidhmchláir freisin agus mar sin an tábla le cuntais úsáideoirí. An mbeidh na pasfhocail ann inléite tar éis uaireanta nó tar éis blianta, ní chinntear é ar lá an ionsaithe, ach sa chlárú.

Stórálann a lán feidhmchlár pasfhocail fós le modhanna nár ceapadh riamh don chuspóir seo: MD5, SHA-1, SHA-256 simplí nó fiú criptithe inchúlaithe. Tá na modhanna seo tapa, agus is é sin an fhadhb go beacht. Is féidir le hionsaitheoirí líon an-mhór iarrthóirí a thriail gach soicind leo.

Tá réiteach le PHP le fada an lá a ríomhann go mall, a ghineann salt go huathoibríoch do gach pasfhocal agus a stórálann an modh agus na paraiméadair sa hash féin. Níl le déanamh agat ach é a úsáid go comhsheasmhach.

## password_hash i PHP: bcrypt nó Argon2id?

Tá roinnt modhanna ar eolas ag `password_hash()`. An rogha de réir lámhleabhar PHP:

| Tairiseach | Modh | Nóta |
|---|---|---|
| `PASSWORD_DEFAULT` | bcrypt faoi láthair | Réamhshocrú, d'fhéadfadh athrú i leaganacha amach anseo |
| `PASSWORD_BCRYPT` | bcrypt | Fachtóir costais 12 mar réamhshocrú ó PHP 8.4, 10 roimhe sin; ní chomhaireamh ach an chéad 72 beart |
| `PASSWORD_ARGON2I` | Argon2i | ó PHP 7.2, má tá PHP tógtha le tacaíocht Argon2 amháin |
| `PASSWORD_ARGON2ID` | Argon2id | ó PHP 7.3, an coinníoll céanna |

Molann OWASP Argon2id mar chéad rogha, le 19 MiB cuimhne ar a laghad, dhá chúrsa agus snáithe amháin, agus bcrypt go príomha do chórais atá ann cheana. Do fhormhór na bhfeidhmchlár PHP, sa chleachtas tá an difríocht níos lú ná an difríocht idir aon cheann de na modhanna seo agus MD5. Is tábhachtaí go n-úsáideann tú ceann acu ar chor ar bith agus go n-oiriúnaíonn tú na paraiméadair go rialta.

Taispeánann tástáil ghearr an bhfuil Argon2id ar fáil:

```php
<?php
var_dump(defined('PASSWORD_ARGON2ID'));
var_dump(password_algos());
```

## Stóráil agus seiceáil: patrún iomlán

Taispeánann an sampla seo a leanas clárú agus logáil isteach le nuashonrú uathoibríoch ar hashanna atá as dáta. Cosnaíonn an seiceáil faid i gcoinne theorainn 72 bheart 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;
}
```

Comhaireann `strlen()` beart, ní carachtair. Tá sé sin d'aon ghnó anseo, mar baineann teorainn bcrypt le bearta. De réir an lámhleabhair ba cheart go mbeadh an colún sa bhunachar sonraí in ann níos mó ná 60 carachtar a choinneáil, is rogha mhaith é 255. Ná socraigh salt dá chuid féin go deo: tá an rogha as dáta agus déantar neamhaird di ó PHP 8.0.

Nuair a aistrítear go PHP 8.4, ardaíonn an fachtóir costais réamhshocraithe do bcrypt ó 10 go 12. Ardaítear hashanna atá ann cheana go huathoibríoch ag an gcéad logáil isteach eile a bhuíochas le `password_needs_rehash()`. Ar chórais atá ualaithe go mór, is fiú tástáil ghearr ualaigh ar an logáil isteach sula n-aistrítear.

> **Leid:**
> Tomhais an fachtóir costais ar do fhreastalaí táirgthe. Ba cheart go gcaithfeadh seiceáil aonair am ríomhaireachta so-airithe, ach fanacht go soiléir faoi bhun soicind, ionas nach mbeidh logáil isteach ina cúng-áit faoi ualach.

## Seanhashanna MD5 agus SHA-1 a chur ina n-áit

Is é an dúshlán fíor de ghnáth an stoc atá ann cheana. Níl na pasfhocail féin ar eolas agat, mar sin ní féidir leat iad a hashadh as an nua go simplí. Má fhanann tú go logálfaidh gach úsáideoir isteach arís, fágtar cuntais neamhghníomhacha gan chosaint. Dá bhrí sin déanann OWASP cur síos ar chur chuige dhá chéim:

1. **Láithreach a chur isteach:** Gach luach MD5 nó SHA-1 atá ann a fhillteáil le script le `password_hash()` agus é a stóráil le marc, mar shampla i gcolún `hash_typ`.
2. **Seiceáil ag an logáil isteach:** Do chuntais marcáilte, an t-ionchur a ríomh ar dtús leis an seanmhodh agus ansin é a sheiceáil le `password_verify()` i gcoinne an luacha fillte.
3. **Cuir in ionad go díreach:** Tar éis logáil isteach rathúil, hash gnáth a ghiniúint ón téacs soiléir agus an marc a bhaint.
4. **Fuílleach a ghlanadh:** Cuntais a bhfuil hashanna fillte acu fós tar éis tréimhse socraithe, iad a shocrú ar athshocrú pasfhocail.

```php
<?php
// Céim 1 (uair amháin le script): $neu = password_hash($alterMd5Wert, PASSWORD_DEFAULT);
// Céimeanna 2 agus 3 ag an logáil isteach:
if ($konto['hash_typ'] === 'md5-umhuellt') {
    $ok = password_verify(md5($eingabe), $konto['passwort_hash']);
    if ($ok) {
        $speichere(password_hash($eingabe, PASSWORD_DEFAULT), 'direkt');
    }
}
```

Tá hashanna fillte níos fearr ná luachanna MD5 lom, ach níos laige ná hashanna díreacha. Is réiteach idirthréimhseach iad, ní sprioc. Tar éis teagmhais inar féidir go raibh tionchar ar an mbunachar sonraí, ní thagann an t-aistriú seo in ionad iarraidh ar úsáideoirí a bpasfhocail a athrú. Déanann [An bhfuil mé ionfhabhtaithe cheana féin?](https://phpsos.de/ga/php2shell/bin-ich-gehackt-anzeichen/) cur síos ar na rianta a léiríonn teagmhas den sórt sin.

## Pepper, criptiú agus bealaí amú eile

Tá cuma shlándála níos mó ar roinnt smaointe, ach is beag a thugann siad nó déanann siad dochar:

- **Tógálacha hash dá gcuid féin** ar nós SHA-256 arís agus arís eile le salt féinghinte, tá siad níos tapúla ná bcrypt agus dá bhrí sin níos laige.
- **Pasfhocail chriptithe** is inchúlaithe iad. Má tá an eochair ar an bhfreastalaí céanna, is beag cosaint a thugann an criptiú tar éis briseadh isteach.
- **Pepper**, is é sin luach rúnda breise do gach pasfhocal, d'fhéadfadh sé a bheith ina shraith bhreise má choinnítear scartha ón mbunachar sonraí é. Ach ní thagann sé in ionad modh hash maith agus déanann sé athruithe níos déanaí níos deacra.
- **Réamh-hashadh roimh bcrypt**, chun teorainn 72 bheart a sheachbhóthar, tá rioscaí dá chuid féin ann de réir OWASP. Tá teorainn shoiléir faid nó Argon2id níos simplí.

Maidir leis na rialacha do phasfhocail nua, is fiú breathnú ar an staid theicneolaíochta freisin: cosnaíonn fad níos mó ná rialacha casta faoi charachtair speisialta, agus ba cheart pasfhocail an-choitianta nó pasfhocail a bhí cheana i sceitheadh sonraí a dhiúltú. De réir taithí, is dóichí go gcruthaíonn athruithe éigeantacha ag eatraimh sheasta gan chúis patrúin intuartha seachas pasfhocail níos láidre.

I gcórais logála isteach ní bhíonn pasfhocail ina n-aonar riamh: cuireann modhanna dhá fhachtóir do riarthóirí agus coscán ar iarrachtaí logála isteach ar scála mór leis an stóráil. Clúdaíonn an treoir [Logálacha isteach riaracháin a chosaint i gcoinne brute force](https://phpsos.de/ga/ratgeber/brute-force-login-schutz/) an dá rud. Do naisc athshocraithe agus cóid aonuaire baineann rialacha eile, féach [Uimhreacha randamacha slána agus comharthaí i PHP](https://phpsos.de/ga/blog/sichere-tokens-php/). Tugann [Feidhmeanna slándála ionsuite PHP](https://phpsos.de/ga/php/eingebaute-sicherheitsfunktionen/) forbhreathnú ar fheidhmeanna eile.

## Conas a chabhraíonn PHP SOS go nithiúil?

- Seiceálaimid conas a stórálann d'fheidhmchlár agus do fhorlíontáin pasfhocail agus aimsímid modhanna as dáta fiú i bhfeidhmeanna taobh.
- Pleanáilimid aistriú an stoic le fillteáil, imirce logála isteach agus tréimhse do chuntais fhuílleacha.
- Comhordaímid an fachtóir costais nó paraiméadair Argon2 le do fhreastalaithe.
- Tar éis teagmhais tacaímid leis an gcinneadh faoi athshocruithe pasfhocal agus lena gcur i bhfeidhm teicniúil.

Tairgimid seiceáil ar bhogearraí PHP féin mar [iniúchadh slándála agus tástáil threáite](https://phpsos.de/ga/leistungen/sicherheitsaudit-penetrationstest/).


## Ceisteanna coitianta

**Cén algartam a úsáideann password_hash le PASSWORD_DEFAULT?**  
Faoi láthair bcrypt. Tugann lámhleabhar PHP le fios gur féidir leis an réamhshocrú athrú nuair a chuirtear modhanna níos láidre leis. Dá bhrí sin ba cheart go mbeadh an colún sa bhunachar sonraí in ann níos mó ná 60 carachtar a choinneáil; luann an lámhleabhar 255 mar rogha mhaith.

**An ceart dom pasfhocail a chriptiú in ionad iad a hashadh?**  
Ní cheart. Is féidir pasfhocail chriptithe a léamh arís leis an eochair, agus bíonn an eochair sin ar an bhfreastalaí céanna den chuid is mó. Is sráid aontreo é hash pasfhocail: ní féidir leis an bhfeidhmchlár ach a sheiceáil an bhfuil ionchur ceart.

**Cé chomh hard is ba cheart an fachtóir costais a bheith le bcrypt?**  
Ó PHP 8.4 is é 12 an réamhshocrú, roimhe sin 10. Luann OWASP 10 mar íostairseach agus molann sé dul chomh hard agus is féidir le do fhreastalaithe. Tomhais ar do chrua-earraí féin cá fhad a thógann seiceáil.

**Cad is brí le teorainn 72 bheart bcrypt?**  
Ní chuireann bcrypt san áireamh ach an chéad 72 beart de phasfhocal, gearrtar gach rud ina dhiaidh sin. I gcás carachtair le comharthaí aicinne, is minic a chomhaireamh carachtar amháin mar dhá bheart. Dá bhrí sin cuir teorainn shoiléir leis an bhfad nó úsáid Argon2id, má tá do PHP tiomsaithe leis.

**An gcaithfidh úsáideoirí a bpasfhocail a athrú tar éis briseadh isteach?**  
Mura féidir a eisiamh gur sceith an bunachar sonraí, ba cheart duit é sin a eagrú. Moillíonn hashanna maithe an bhriseadh go mór, ach fanann pasfhocail lag leochaileach. An bhfuil dualgas fógartha ann ina theannta sin, soiléirigh é le d'oifigeach cosanta sonraí.

## Foinsí

- [Lámhleabhar 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/)
