Kontrola bezpečnosti hesel pomocí PHP

Publikováno 19.11.2007 21:00, autor Vojtěch Sysel

Jako správce stránek určitě řešíte problémy s bezpečnými hesly, proto jsem se rozhodl zveřejnit funkci vlastní výroby napsanou v PHP, která bezpečnost hesla ohlídá.

Jak vypadá bezpečné heslo? Určitě není stejné jako uživatelské jméno (ale někteří uživatelé tyto hesla rádi používají ;-) ), obsahuje malá i velká písmena anglické abecedy, čísla a je 6?8 znaků dlouhé. Někteří jistě dodají, že správné heslo musí obsahovat také speciální znaky, jako jsou @ ? ! < > atd., proto nabízím volbu zapnutí kontroly těchto znaků. Musím však podotknout, že většina uživatelů si tato hesla zapamatuje jen s těží, takže spíše dosáhnete opačného efektu. Stejně to dopadne s příliš dlouhými hesly, nebo požadavky na častou změnu hesla.

Funkce také kontroluje zda-li heslo neobsahuje řetězce 123, abc, xyz, 789 atd. implementaci dalších řetězců nechám na představivosti programátora / čtenáře, který bude funkci používat.

/**
*  function check password, return true (save password)
*  or false (unsafe password)
*  @param  $pass      password
*  @param  $user      username
*  @param  $specchrs  special chars true/false
*  @param  $length    minimus password length
*
*  @return  true/false
*/
function CheckPassword($pass, $user, $specchrs = false, $length = 8) {

  /* convert to small letters */
  $user_small = strtolower($user);
  $pass_small = strtolower($pass);

  /* check password length and username in password */
  if (strlen($pass) < $length ||
      strstr($pass_small, $user_small))
   return false;

  /* check password contains big and small letters and numbers */
  if (!ereg("([a-zA-Z0-9]+)", $pass, $tmp))
    return false;

  /* check password contains special chars as $!:?.\&@ etc */
  if ($specchrs && !ereg("[[:punct:]]", $pass, $tmp))
    return false;

  /* check password doesn't contain abc's 123's strings
    (insert only small letters!) */
  $data = array("123", "abc", "xyz", "789");
  foreach ($data as $value) {
    if (strstr($pass_small, $value))
      return false;
  }

  return true;
}

Funkci můžete jakkoliv modifikovat, ale budu potěšen, dáte-li mi vědět, že jste ji použili :-). A co bude příště? Nechte se překvapit ;-)

přidat komentář

Nový komentář
(nebude zobrazen)

Ověření člověka nemohu přečíst kód
Opište prosím kód z tohoto obrázku
Text komentáře

Jméno a text komentáře jsou povinné položky. Bez jejich vyplnění nebude komentář přidán!
Komentáře bez správně opsaného ověřovacího kódu nebudou přidány.
Při psaní komentáře můžete využívat značkovací jazyk Texy!.
Ke všem odkazům v komentáři bude přidán atribut nofollow.