Administratorzy i technicy znają niezliczone historie o użytkownikach, którzy nie mają pojęcia o bezpieczeństwie w sieci i w nieskończoność wybierają hasła w stylu "hasło", "password", imiona ich dzieci, zwierzątek czy wreszcie ich własne. Ci nieco bardziej pomysłowi wybierają na chybił trafił hasło ze słownika, z billboardu czy jakiejkolwiek innej formy przekazu pisemnego. Któż mogłby odkryć w ten sposób wybrane hasło? Cóż, komputer może. Dobrze jest pomóc takiemu użytkownikowi, określając pewne zasady tworzenia haseł i jak często powinny być one zmieniane. W praktyce te zasady zostały już wbudowane w wielu systemach autentyfikacji. W Sieci sprawa wygląda nieco inaczej.
Jedną z metod, aby przyzwyczaić użytkownika do używania bezpieczniejszych haseł to weryfikacja wprowadzonych przez niego danych. Najprościej będzie napisać funkcję w JavaScript, która tego dokona. Najwijmy pole formularza, w które użytkownik wpisuje hasło 'pass'. Sprawdzić pole można podczas wysyłania formularza (metoda onSubmit) lub zaraz po tym jak pole zostanie wypełnione (metoda onBlur). Następnie sprawdzimy, czy zmienna spełnia nasze kryteria, jeśli wygenerujemy komunikat o błędzie.
Załóżmy, że chcemy, aby hasła miały długość przynajmniej 8 znaków, lecz nie więcej niż 16.
if ((pass.length < 8) || (pass.length > 16)) {
error = "Hasło musi mieć przynajmniej 8 znaków i nie więcej niż 16.\n";
}
length to własność pola pass (tak je sobie wcześniej nazwaliśmy). Teraz wypadałoby sprawdzić czy zostały użyte tylko te znaki, które sobie życzymy, czyli znaki alfanumeryczne, podkreślik, kropka i znak minus.
var dozwolone_znaki =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
._-";
var tmp;
for (var i=0; i<pass.length; i++) {
tmp = "" + pass.substring(i, i+1);
if (dozwolone_znaki.indexOf(tmp) == "-1") {
error = "Podane hasło zawiera niedozwolone znaki.\n";
}
}
Metoda indexOf znajduje znak w podanym ciągu znaków, jeśli go znajdzie zwraca jego pozycję, jeśli nie wartość -1, która jest wykorzystywana do sprawdzania i wygenerowania ewentualnej informacji o błędzie.
Jednak opisany wyżej sposób pozwala użytkownikom na wpisywanie słownikowych haseł. Oto prosta funkcja w PHP, która generuje losowe hasło o zadanej długości:
Jak już zostało napisane wyżej, funkcja ta generuje losowe hasło. Jeszcze tylko kilka słów wyjaśnienia odnośnie użytych funkcji. Na początek uruchomiony zostaje generator liczb pseudolosowych. "Pseudo" ponieważ losowane liczby to aktualny czas w mikrosekundach pomnożony przez milion. Następnie w pętli wybieramy znaki ze zdefiniowanego wcześniej zbioru ($dozwolone_znaki). Kod został maxymalnie skrócony, przez co trudniej go zrozumieć. Jednak jest to możliwe. Funkcja substr() zwraca ciąg znaków od podanego miejsca do końca. Trzeci, opcjonalny, parametr tej funkcji to długość zwracanego ciągu, w naszym przypadku jeden znak. Miejsce, od którego zaczynamy jest losowane przy użyciu funkcji mt_rand. Strlen zwraca długość podanego ciągu znaków, więc losowane liczby zawierają się w przedziale od zera (pierwszy parametr) do długości ciągu $dozwolone_znaki (drugi parametr). Strasznie to zawile napisane, ale w gruncie rzeczy bardzo proste do zrozumienia.
Tak wylosowane hasło można podesłać użytkownikowi na jego email. Przy okazji sprawdzamy w ten sposób, czy podał prawdziwy adres.