Díky za článek, určitě se to bude někdy hodit.
xom`s pinion - Tom Hnatovsky Blog
JavaScript: Měření síly hesla
V jednom z předchozích článků jsem hovořil o registračních formulářích, tam jsem se také zmínil o vhodném doplňku, který by měřil sílu hesla. Uživatelé jsou většinou při volbě hesla inspirováni těmi nejsnáze odhadnutelnými pohnutkami, tudíž je jejich volba prolomitelná. Uživatel třeba tuší, že jeho heslo není zrovna nejbezpečnější, ale nemusí vědět, jak docílit toho, aby vymyslel heslo silnější. Na řadu může přijít programátor a pomoci mu javascript ukazatelem síly hesla. V zásadě jde o velice jednoduchý skript, který popíši v druhé polovině článku, v té první se zaměřím na definici silného hesla.
Obecně lze říci, že jakékoliv heslo, které je shodné s přihlašovacím jménem, je při znalosti toho přihlašovacího řetězce velice slabé a to může klidně splňovat všech 5 následujících jednoduše měřitelných bodů pro tvorbu kvalitního hesla.
- Zcela jistě lze prohlásit, že delší heslo zabere více výpočetního výkonu (času) ke svému prolomení, proto by mělo být heslo delší než 6 znaků.
Pokud bychom předpokládali, že se heslo skládá ze znaků A-Z, 0-9 s rozlišením velikosti písmen, tak máme 62 možných znaků pro použití v hesle, tak máme 62^6 (= 56 800 235 584) možností, jak může heslo vypadat. Pokud bychom uvažovali útok hrubou silou, při kterém by byly dotazy vyřizovány každou 1ms, tak by projetí celého vzorku trvalo zhruba 2 roky. Pro představu zmíním, že heslo složené ze 4 znaků by ale zabralo pouze 4 hodiny. - Heslo by mělo obsahovat velká i malá písmena.
Příklad z bodu 1 by při použití pouze znaků z intervalu a-z zabral zhruba 3 dny. - Řetězec hesla by měl obsahovat číslici.
- Heslo obohacené o některý ze speciálních znaků, např. $, @, #..., opět rozšiřuje množinu znaků, které je nutné prověřovat.
- Speciální kategorií jsou hesla obsahující vše výše zmíněné a navíc mající více než 12 znaků.
Rozšíření znakové sady, ze které čerpáte symboly do svého hesla, nemá pozitivní vliv jenom na útok provedený hrubou silou (ten by se stejně díky vytížení serveru velice rychle objevil), ale hlavně na možnost tvorby zcela unikátního řetězce, který se nebude nacházet v nějaké databázi používaných hesel. Zároveň s komplikovaností hesla roste jeho míra nezapamatovatelnosti náhodným čumilem či posluchačem (i když moc dobře víme, že se heslo neříká!)
Skript pro vaše formuláře
5 zmíněných bodů vezmu jako klíčová a splnění každého bodu přidám uživateli bod, takže heslo bude moci dostat 0 až 5 bodů. Do pole s heslem přidám akci onkeyup a při každém upraveném znaku řetězec validuji funkcí passwordStrength. Funkce je velice jednoduchá, obsahuje 5 regulárních výrazů definici pro grafické znázornění síly hesla.
function passwordStrength (password) {
var point = 24;
var score = 0;
if ( password.length > 6) score++;
if ( ( password.match(/[a-z]/) ) && ( password.match(/[A-Z]/) ) ) score++;
if ( password.match(/\d+/)) score++;
if ( password.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,(,)]/) ) score++;
if ( password.length > 12) score++;
var box = document.getElementById("passwordStrength").getElementsByTagName("DIV");
box[0].style.left = ( point * score ) + "px";
}
V příkladu na externí stránce je ve zdrojový kód doplněn o komentáře u jednotlivých řádků k lepší orientaci.
Aktivní ukázka
V ukázce byl použit obrázek: http://pinion.cz/images/pass.jpg (jednoduchý přechod z červené do zelené)
Skriptem ukazujícím sílu hesla uživateli pomáháme tvořit kvalitní heslo. Otázkou je zda-li stejné heslo nebude používat na svých dalších 20 stránkách, kde je registrován, zda-li ho nebude volat manželce z autobusu, zda-li si ho nebude lepit v práci na monitor atd.
Identita je na internetu stále choulostivá záležitost, pokud si i vy chce zachovat svou identitu, tak používejte mozek a většině problémů s ukradením virtuální podoby se vyhnete, to je i má rada vašim uživatelům. Škoda jen, že si ve větší míře půjdou běžní uživatelé vždy svou cestou a pojmy jako silné heslo pro ně budou obtěžující.
Vaše komentáře
hodne pekne a prakticke, dakujem ;)
želvák 1.3.08 00:33
velmi zajímavé informace, díky za to