Wedos

pondělí 29. září 2014

Léta devadesátá

Chvilku jsem přemýšlel co vlastně znamenají léta devadesátá. Jaká byla. Co znamenala pro nás a co znamenala globálně. Zapátral jsem na Youtube. Zapátral jsem i jinde. A udělal takový malý průřez tím co mi v hlavě zůstalo z devadesátých let.
Vezmu li to zpět buď jsem já pesimista. Nebo ten svět fakt stál za hovno už tenkrát.

Zombie a vzpomínka na Irsko...


A nejen na něj... první ploužák.


9 prstů... chvilku to trvalo než jsem našel verzi bez zmršeného zvuku.


Hořká vzpomínka na to že dějiny jsou často jiné než by lidé chtěli. První válka v zálivu. Mimochodem stejně jako ve Vietnamu s vylhanou záminkou.


Léta studií v mém rodném městě...


Mimoděk tady jsem se v roce 1979 narodil.




Bezpečné ukládání hesel v PHP

Na úvod si přiznejme zásadní fakt. Nelze něco zašifrovat tak aby to nikdo nikdy nerozšifroval. Nalezení klíče a případné rozšifrování je vždy otázkou času a důvtipu. Snaha tedy není vytvořit něco "absolutně" neprůstřelného, ale zmenšit šanci na prolomení hesla. Jsou různé triky jak toho dosáhnout.

Neukládání hesla jako text
Pokud někdo ukládá hesla jako text (jako to dělají administrátoři na ČZU (ta univerzita v Praze na Suchdole)). Koleduje si nejen o to aby hesla někde prosákla náhodou, ale i o další problémy.

Ideální způsob jak uložit heslo je ho vlastně neuložit. Přesněji uložit jeho otisk a ten používat ke kontrole správně zadaného hesla.
Aby jste to ještě ztížili je na místě zkusit, přidat sůl (SALT) to je několik znaků (náhodných například), které se k původnímu obsahu "nějak" připojí a až po té se vytvoří otisk.
Pro otisky používáme s oblibou HASHovací funkce.
Starší MD5 už je dnes pokládána za ne zrovna bezpečnou. Druhá běžně používaná SHA1 je zatím v klidu a v pohodě.
Pokud použijete SALT nějakým vhodným způsobem nevidím problém proč by to nemohlo fungovat.

Teď trošku praxe:

Mějme proměnou HESLO kde je heslo zadané uživatelem a odeslané z formuláře. Kontrola bude vypadat nějak takhle.

if(sha1($heslo) == $heslozdb):
{ echo "Heslo je OK";
}
else:
{echo "Heslo není OK";
}
endif;

Heslo pak budeme ukládat celkem prostým způsobem?

$heslododb = sha1($heslo);
UlozHeslo($heslododb); 

Pokud se rozhodneme používat sůl je dobré jí například neukládat do DB. Vtip je totiž v tom, že sůl byť natvrdo zapsaná v PHP znemožňuje při ukradení samotné DB zjistit hesla.
Programová logika skrytá před zlodějem DB ho totiž bude nutit ve snaze přijít na hesla používat BrutalFirce techniky. Což Vám jako správci DB dává slušnou šanci problém vyřešit.
Praktické je, ale i použití nějaké konstanty. Příkladem budiž využití data registrace uživatele tak, že například název měsíce použijete jako SALT.
Takový postup je poměrně chytrý zvláště pokud v češtině použijete diakritiku. Obecně se tím složitost hesel násobně zvětší. SALT můžete pragmaticky přidat například před a za heslo. Opět tím komplikujete použití BrutalForce útoku.

Například:

$heslododb = sha1($salt.$heslo.$salt);
UlozHeslo($heslododb);

Důležité je aby jste byly schopní sůl znovu vygenerovat. Otázkou je jak je vhodné takovou věc ukládat do DB. Proto je lepší použít jiný zdroj dat než přímo DB.