Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

🔐 Mitä hash-algoritmia WordPress käyttää

🔐 Mitä hash-algoritmia WordPress käyttää

Salasanasi hallintapaneeliin on viimeinen asia, joka seisoo hakkeroijan ja sivustosi täyden hallinnan välissä. Heikko salasana tai vanhentunut tallennusmekanismi tekee kalliista hosting-palvelusta ja maksetusta palomuurista pelkkiä koristeita.

Kahdenkymmenen vuoden aikana WordPress on kehittynyt MD5:stä teollisuustason bcryptiin. Versiosta 6.8 alkaen salasanojen tiivistämisestä tuli modernia suoraan laatikosta, ilman lisäosia tai kiertoteitä. Mutta jokaisen sivuston omistajan tulisi ymmärtää tarkalleen, mitä heidän salasanalleen tapahtuu "Kirjaudu sisään" -painikkeen napsauttamisen jälkeen.

Alla on koko ketju: salasanan syöttämisestä kirjautumislomakkeeseen aina tietokannassa olevaan tiivistemerkkijonoon asti. Mukana koodi, filtterit ja tarkat asetukset niille, jotka haluavat enemmän kuin mitä ydin tarjoaa.

💡 Nopea yleiskatsaus:

  • WordPress 6.8 ja uudemmat tiivistävät salasanat bcrypt-algoritmilla, samalla standardilla, jota pankit ja valtionhallinnon järjestelmät käyttävät
  • Vanhat tiivisteet (MD5, phpass) päivitetään automaattisesti bcryptiin käyttäjän seuraavan kirjautumisen yhteydessä; migraatio on saumaton eikä vaadi manuaalisia toimia
  • wp_hash_password_algorithm -filtterillä voit vaihtaa Argon2:een yhdellä koodirivillä, ilman lisäosia
  • PHP Native Password Hash -lisäosa on edelleen toimiva vaihtoehto versioille, jotka ovat alle 6.8, ja se tarjoaa hienosäädetyn Argon2-parametrien määrityksen wp-config.php:n kautta

Mitä tiivistäminen on ja miksi WordPress tarvitsee sitä

Tiivistäminen on yksisuuntainen kryptografinen muunnos. Minkä tahansa pituisesta merkkijonosta saat kiinteän kokoisen "sormenjäljen". Tiivisteen palauttaminen takaisin alkuperäiseksi salasanaksi on matemaattisesti mahdotonta; voit ainoastaan kokeilla eri syötteitä ja verrata tuloksena saatavia tiivisteitä.

WordPressin salasanan hajautuskaavio

Toisin kuin salaus, jossa data voidaan palauttaa avaimella, tiiviste on yksisuuntainen lippu. Kun syötät salasanan kirjautumisen yhteydessä, WordPress ajaa sen saman tiivistefunktion läpi ja vertaa tulosta siihen, mitä tietokantaan on tallennettu. Jos ne täsmäävät, pääsy myönnetään. Jos eivät, pääsy evätään.

WordPress tallentaa tiivisteet wp_users-tauluun, user_pass-kenttään. Jos tietokanta vuotaa (ja näin on tapahtunut jopa jäteille: LinkedIn, Yahoo ja Tumblr menettivät satoja miljoonia tietueita), hyökkääjä ei saa luettavia salasanoja vaan pitkiä bcrypt-merkkijonoja. Salasanan palauttaminen tällaisesta merkkijonosta on mahdotonta. Mutta sen arvaaminen sanakirjahyökkäyksellä on mahdollista, jos algoritmi on heikko tai vanhentunut. Juuri siksi tiivistämisen kehitys WordPressissä on niin merkityksellistä.

Miten WordPress ennen tiivisti salasanat: MD5 ja phpass

Ennen versiota 2.5 (2008) WordPress käytti pelkkää MD5:tä. Algoritmi muuntaa minkä tahansa salasanan 128-bittiseksi tiivisteeksi, joka koostuu 32 heksadesimaalimerkistä. Se näyttää turvalliselta, mutta MD5 on haavoittuvainen rainbow tableille (ennakkoon lasketuille tiivistetietokannoille miljardeille yleisille salasanoille). Hakkeroija, jolla on pääsy tietokantaan, yksinkertaisesti etsii tiivisteen tällaisesta taulukosta ja saa välittömästi alkuperäisen salasanan.

Versiosta 2.5 alkaen WordPress siirtyi phpassiin, kannettavaan kirjastoon, joka perustuu bcryptiin (Blowfish). Se lisäsi satunnaisen "suolan" salasanaan ja ajoi tuloksen tiivistefunktion läpi useita kertoja (oletuksena 2^8 = 256 iteraatiota). Suola teki rainbow tableista hyödyttömiä: kaksi identtistä salasanaa eri käyttäjille tuotti erilaiset tiivisteet. Samalla phpass säilytti taaksepäin yhteensopivuuden MD5:n kanssa; vanhat salasanat eivät hajonneet ja ne päivitettiin sujuvasti uuteen muotoon kirjautumisen yhteydessä.

Tämä oli riittävää monien vuosien ajan. Mutta ala kehittyi: moderni laitteisto (GPU-farmit ja ASICit) pystyy kokeilemaan miljardeja tiivisteitä sekunnissa. Bcrypt-algoritmista, jossa on säädettävä kustannuskerroin, tuli alan standardi. Ja WordPress 6.8:sta alkaen ydin käyttää sitä natiivisti.

WordPress 6.8 ja bcrypt: mikä muuttui

WordPress 6.8 "Cecil" -julkaisu (huhtikuu 2025) toi täydellisen siirtymän bcryptiin. Aiemmin ydin käytti omaa PasswordHash-luokkaansa phpass-kirjastosta; nyt se kutsuu natiivia PHP-funktiota password_hash() PASSWORD_BCRYPT-vakiolla.

WordPressin tietoturva natiivilla PHP-hajautuksella

Keskeiset muutokset wp_hash_password()-funktiossa:

  • bcrypt oletuksena. Kaikki uudet salasanat tiivistetään password_hash()-funktiolla käyttäen bcrypt-algoritmia ja PHP-palvelimen asettamaa kustannuskerrointa (yleensä 10).
  • Vanhojen salasanojen automigraatio. Kun käyttäjä kirjautuu sisään, WordPress tarkistaa password_needs_rehash()-funktiolla, tarvitseeko tiiviste päivitystä. Vanha phpass-muoto ($P$...) korvataan saumattomasti bcryptillä.
  • Suoja pitkille salasanoille. bcrypt katkaisee yli 72 tavua pitkät salasanat, mikä vähentää entropiaa. WordPress 6.8 ratkaisee tämän esitiivistämällä SHA-384:llä käyttäen toimialueavainta wp-sha384 ja koodaamalla base64:ksi. 100-merkkinen salasana säilyttää täyden vahvuutensa.
  • Filtterit joustavaa konfigurointia varten. Uusia koukkuja ilmestyi: wp_hash_password_algorithm (algoritmin valinta) ja wp_hash_password_options (parametrit: cost, memory_cost, threads).

wp_hash_password()-kutsu WordPress 6.8 -ytimessä näyttää tältä:

1function wp_hash_password( $password ) {
2 global $wp_hasher;
3
4 if ( ! empty( $wp_hasher ) ) {
5 return $wp_hasher->HashPassword( trim( $password ) );
6 }
7
8 if ( strlen( $password ) > 4096 ) {
9 return '*';
10 }
11
12 $algorithm = apply_filters( 'wp_hash_password_algorithm', PASSWORD_BCRYPT );
13 $options = apply_filters( 'wp_hash_password_options', array(), $algorithm );
14
15 if ( PASSWORD_BCRYPT !== $algorithm ) {
16 return password_hash( $password, $algorithm, $options );
17 }
18
19 $password_to_hash = base64_encode(
20 hash_hmac( 'sha384', trim( $password ), 'wp-sha384', true )
21 );
22
23 return '$wp' . password_hash( $password_to_hash, $algorithm, $options );
24}

Funktio tarkistaa ensin, onko tiivistyslogiikka korvattu ulkoisella lisäosalla (globaali muuttuja $wp_hasher). Sen jälkeen se hylkää yli 4096 merkkiä pitkät salasanat; tällaiset kirjautumisyritykset palauttavat *, mikä tekee autentikoinnista mahdotonta. Seuraavaksi tulee kiinnostava osa: wp_hash_password_algorithm-filtteri määrittää algoritmin. Jos valinta EI ole bcrypt, salasana tiivistetään suoraan. Jos bcrypt on valittu, salasana kulkee ensin SHA-384:n läpi avaimella wp-sha384, koodataan base64:ksi ja vasta sitten välitetään password_hash()-funktiolle. Tulosteena on tiiviste, jossa on $wp-etuliite, mikä erottaa "WordPress"-bcryptin tavallisesta bcryptistä. Tämä on hyödyllistä tietokantaauditoinneissa tai integroitaessa ulkoisiin järjestelmiin.

Miten vahvistaa tiivistämistä Argon2:lla

bcrypt on erinomainen perustaso. Seuraava askel on Argon2, vuoden 2015 Password Hashing Competitionin voittaja. Argon2 suunniteltiin erityisesti vastustamaan GPU-hyökkäyksiä: se on muisti-intensiivinen, ja näytönohjaimet ovat tässä pullonkaula.

Koodiesimerkki WordPressin vaihtamisesta Argon2:een

Vaihtoehto 1: wp_hash_password_algorithm-koukku (WordPress 6.8+)

Lisää tämä lapsiteemasi functions.php-tiedostoon tai Code Snippets -lisäosan kautta:

1add_filter( 'wp_hash_password_algorithm', function() {
2 return PASSWORD_ARGON2ID;
3});

Parissa sekunnissa WordPress vaihtaa Argon2ID:hen. Vanhat salasanat tiivistetään automaattisesti uudelleen, kun käyttäjät kirjautuvat sisään. Hosting-palvelusi täytyy tukea Argon2:ta PHP:ssä; tarvitset version 7.3 tai uudemman Argon2ID:tä varten. Voit tarkistaa saatavuuden kutsumalla password_algos()-funktiota.

Parametrien hienosäätöön käytä rinnakkaista koukkua:

1add_filter( 'wp_hash_password_options', function( $options, $algorithm ) {
2 if ( PASSWORD_ARGON2ID === $algorithm ) {
3 return array(
4 'memory_cost' => 65536, // 64 MB
5 'time_cost' => 4,
6 'threads' => 2,
7 );
8 }
9 return $options;
10}, 10, 2 );

memory_cost-parametri määrittää, kuinka paljon muistia algoritmin on käytettävä tiivistettä laskettaessa; mitä korkeampi arvo, sitä vaikeammaksi GPU-pohjainen väsytyshyökkäys muuttuu. time_cost asettaa iteraatioiden määrän ja threads säikeiden määrän.

Vaihtoehto 2: PHP Native Password Hash -lisäosa

WordPressin versioille, jotka ovat alle 6.8, PHP Native Password Hash -lisäosa tekee saman asian. Se korvaa kaiken tiivistyslogiikan natiivilla password_hash()-funktiolla, tukee bcryptiä ja Argon2:a, eikä siinä ole käyttöliittymää; kaikki asetukset määritellään vakioilla wp-config.php-tiedostossa:

1define( 'WP_PASSWORD_HASH_ALGO', PASSWORD_ARGON2ID );
2define( 'WP_PASSWORD_HASH_OPTIONS', [
3 'memory_cost' => 65536,
4 'time_cost' => 4,
5 'threads' => 2,
6] );

Lisäosaa ei ole päivitetty yli kahteen vuoteen, mutta sen koodi on minimaalinen ja vakaa. WordPress 6.8:ssa sen toiminnallisuus on sisäänrakennettuna ytimessä, joten voit poistaa sen ja käyttää sen sijaan natiiveja suodattimia.

Hash-generaattorit: mitä toimii nyt

Joskus täytyy luoda hash manuaalisesti: kun kirjoitat salasanan suoraan tietokantaan phpMyAdminin kautta tai siirrät käyttäjiä ulkoisesta järjestelmästä.

WordPressin salasanahajautuksen generaattori WP-CLI:n kautta

Vanhempien WordPress-versioiden aikakaudella suosittu passwordtool.hun online-generaattori ei ole enää saatavilla: sivusto vaihtoi omistajaa. Toimivia vaihtoehtoja tänään:

  • WP-CLI: komento wp user update <id> --user_pass="newpassword" hoitaa kaiken oikein wp_hash_password()-funktion kautta. Nopea, turvallinen ja taatusti oikein.
  • PHP-skripti sivuston juuressa: luo väliaikaisesti tiedosto, jossa kutsutaan echo wp_hash_password('password');, ja poista se heti käytön jälkeen.
  • Mikä tahansa online-bcrypt-generaattori: esimerkiksi bcrypt.online. Mutta muista: WordPress 6.8 lisää $wp-etuliitteen ja SHA-384-esihajautuksen, joten pelkkä bcrypt-hash ei toimi suoraan tietokantaan syötettynä.

Käytännössä WP-CLI on luotettavin vaihtoehto.

Miten valita salasana, jota ei murreta

Edes bcrypt ei pelasta, jos salasana on admin123. Hakkerit aloittavat hyökkäyksensä sanakirjapohjaisella väsytyshyökkäyksellä.

WordPressin salasanan vahvuuden tarkistusliittymä

Dropboxin zxcvbn-työkalu, joka on sisäänrakennettu WordPressiin salasanojen arviointia varten hallintapaneelissa, hylkää yleiset kaavat: syntymäpäivät, 123456 ja qwerty, lemmikkien nimet. Se analysoi salasanoja sanakirjoja, näppäimistöasetteluja ja merkkien korvauskuvioita vasten. "Heikko"-luokitus tarkoittaa, että salasana on arvattavissa sekunneissa.

Kolme käytännön sääntöä:

  • Satunnaisia sanoja, ei merkkioksennusta. Neljästä tai viidestä toisiinsa liittymättömästä englanninkielisestä sanasta ja erottimista koostuva salasana (esimerkiksi correct-horse-battery-staple) on helpompi muistaa kuin Tr0ub4dor&3 ja sen murtaminen vie paljon kauemmin.
  • Pituus on tärkeämpää kuin monimutkaisuus. Kuusitoista satunnaista pientä kirjainta tarjoaa suuremman entropian kuin 8 merkkiä erikoismerkkeineen. Ja bcrypt WordPress 6.8:ssa säilyttää minkä tahansa järkevän pituisen salasanan entropian SHA-384-esihajautuksen ansiosta.
  • Käytä salasanahallintaa. Ihmismuisti on huono työkalu tusinan yksilöllisen salasanan hallintaan. 1Password on maksullinen kultastandardi perhesuunnitelmalla, KeePass on ilmainen avoimen lähdekoodin sovellus paikallisella tietokannalla, Bitwarden on onnellinen välimuoto: ilmainen, pilvipohjainen ja avointa lähdekoodia.
Salasananhallintaohjelma WordPress-tunnusten tallentamiseen

Salasanahallinta luo, tallentaa ja täyttää salasanat automaattisesti. Sinun tarvitsee muistaa vain yksi pääsalasana. Ja jos sivusto tukee kaksivaiheista tunnistautumista, ota se ehdottomasti käyttöön. Salasana ja sovelluksesta saatava kertakäyttökoodi tekevät kirjautumisesta käytännössä murtamattoman.

Video: miten salasanojen hajautus toimii WordPressissä

Lyhyt selitys hajautusmekanismista salasanan syöttämisestä sen tallentamiseen WordPress-tietokantaan:

⁉️🤔 Usein kysytyt kysymykset

Toimivatko vanhalla MD5:llä hajautetut salasanat yhä WordPress 6.8+:ssa?

Kyllä. Kun käyttäjä kirjautuu sisään, WordPress tunnistaa vanhan hash-muodon, vahvistaa salasanan aiemmalla algoritmilla, ja jos kaikki täsmää, päivittää hashin saumattomasti bcryptiin. Vanhoja käyttäjiä ei tarvitse poistaa eikä salasanojen vaihtoa pakottaa.

Tarvitaanko PHP Native Password Hash -lisäosaa WordPress 6.8:ssa ja uudemmissa?

Ei. Kaikki mitä lisäosa teki (hajautus password_hash()-funktiolla ja Argon2-tuki) on nyt saatavilla natiivien wp_hash_password_algorithm- ja wp_hash_password_options-suodattimien kautta. Lisäosa on relevantti enää vain versioille, jotka ovat alle 6.8.

Voinko vaihtaa takaisin Argon2:sta bcryptiin?

Teknisesti kyllä, vaihtamalla algoritmia suodattimessa. Mutta vanhoja Argon2-hasheja ei tunnisteta, ja käyttäjien on nollattava salasanansa. Jos kokeilet algoritmeja tuotantosivustolla, tee ensin täydellinen tietokantavarmuuskopio.

Auttaako bcrypt, jos tietokanta vuotaa?

bcrypt tekee salasanojen väsytyshyökkäyksestä vuotaneista hasheista satojatuhansia kertoja hitaampaa kuin MD5. Kustannuskertoimella 10 yhden hashin laskeminen nykyaikaisella suorittimella vie noin 0,1 sekuntia; miljardi yritystä veisi vuosia. Mutta jos salasana on password, se löytyy sanakirjahyökkäyksen aivan ensimmäisellä iteraatiolla. Algoritmi suojaa monimutkaisia salasanoja; mikään ei voi pelastaa heikkoja.

Miten varmistan, että salasanani hajautetaan bcryptillä?

Tarkista wp_users-taulu phpMyAdminin kautta. Uusien käyttäjien (ja niiden, jotka kirjautuivat sisään 6.8-päivityksen jälkeen) user_pass-kentän pitäisi alkaa $wp-etuliitteellä (WordPressin uuden bcrypt-muodon merkki). Vanhat phpass-hashit näyttävät tältä: $P$B.... Jouk kotarkistusta varten aja tämä SQL-kysely: SELECT COUNT(*) FROM wp_users WHERE user_pass NOT LIKE '$wp$%' AND user_pass NOT LIKE '$P$%';. Se näyttää, kuinka monta salasanaa on jumissa vanhentuneessa muodossa, jos yhtään.

Mitä WordPressin hajautukselle pitää tehdä juuri nyt

Jos WordPress-sivustosi on versiossa 6.8 tai uudemmassa, bcrypt suojaa sinua jo; sinun ei tarvitse tehdä mitään. Ydin päivittää vanhat hashit automaattisesti, kun käyttäjät kirjautuvat sisään, ja migraatio on täysin saumaton.

Jos haluat Argon2:n, lisää wp_hash_password_algorithm -suodatin arvolla PASSWORD_ARGON2ID functions.php-tiedostoon. Varmista ensin, että palveluntarjoajasi tukee Argon2:ta: aja var_dump(password_algos()); testiskriptin kautta. Useimmat nykyaikaiset palveluntarjoajat tukevat sitä.

Versioissa ennen 6.8:aa asenna PHP Native Password Hash -lisäosa; se antaa sinulle bcryptin tai Argon2:n ilman ydintiedostojen päivittämistä. Ja ajoita samalla WordPress-päivitys: jokainen pääversiopäivitys sulkee kymmeniä haavoittuvuuksia, ei pelkästään tiivisteisiin liittyviä.

Ja mikä tärkeintä, vaihda admin123 johonkin kunnolliseen. Mikään algoritmi ei pelasta sinua sanakirjahyökkäykseltä, jos salasanasi on rockyou.txt-listan sadan ensimmäisen joukossa.