Hírek

Jelszavak tárolása

Programozás

Felhasználóink adatait általában egy táblában tároljuk, ez így rendben is van.

CREATE TABLE felhasznalo (
  felhasznalo VARCHAR(20),
  jelszo VARCHAR(128),
  belephet CHAR(1) DEFAULT 'N',
  ...,
  PRIMARY KEY (felhasznalo)
);

Ide rakosgatjuk a felhasználónk adatait, de egy csúnya hacker bácsi feltöri az adatbázisunk, mehet ki a sajnálkozó levél minden partnerünknek, nem csekély hitelvesztéssel.

Nagyon veszélyes akár még hozzáférni is a jelszavakhoz mi magunknak is, a felhasználók többsége ugyanezt használja pl. Facebook, vagy Google alatt is. Kerülni kell minden kockázatot.

Tegyük olvashatatlanná a jelszavakat.

Egyszerű megoldás

A jelszó teljes értékére nekünk később nem nagyon van szükségünk, teljesen mindegy, hogy mit használunk helyette.
Minek tároljam el?
Sokkal jobban teszem, ha inkább csak egy hash-t rakok el, és ezzel azonosítom a felhasználót.

Használjunk pl. MD5, vagy még jobb SHA2, vagy SHA3 hash értéket.

SQL

SELECT SHA2('jelszo', 512);

Ügyelve arra, hogy a jelszó mezőbe most 128 karakter fog kerülni.

Ha a felhasználó neve sohasem változik, bonyolíthatjuk, tároljuk el így:

SELECT SHA2(CONCAT('felhasznalo-neve', 'jelszo'), 512);

Tehát össze is fűzhetjük a felhasználó nevével, gyakorlatilag lehetetlenné téve a visszafordítását még akkor is, ha a jelszó egy értelmes szó.

Hogyan keressem vissza?

Egyszerű lekérdezéssel:

SELECT belephet FROM felhasznalo
WHERE (felhasznalo = 'felhasznalo-neve') AND (jelszo = SHA2('jelszo', 512));

Csak akkor léphet be, ha a válasz nem üres, vagy nem 'N'.