ELEKTRO
CHEMIE
PROGRAMOVÁNÍ
FOTKY
BLOG
E-SHOP

Elektro

  • Novinky
  • Aktuality
  • PHP
  • MySQL
  • JavaScript
  • .NET
  • Download
  • Odkazy
  • Anketa
  • Návštěvní kniha
  • Mapa webu
  • O webu
  • RSS

  • © by Hugo moravec.zd@gmail.com

    Jednoduché zaheslování stránek

    Občas je výhodné omezit přístup k některým částem vašeho webu. To lze řešit mnoha způsoby a samozřejmě i pomocí PHP. Nejdřív musíme vytvořit stránku s formulářem.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

    <html>
    <head>
    <title>Přístup na chráněnou stránku</title>
    <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
    </head>

    <body>
    <form method="post" action="login.php">
    <table border="0" cellpadding="0" cellspacing="0">
    <tr><td>Login:</td><td><input type="text" name="log" size="20"></td></tr>
    <tr><td>Heslo:</td><td><input type="password" name="pwd" size="20"></td></tr>
    <tr><td colspan="2"><input type="submit" name="submit" value="Odeslat"></td></tr>
    </table>
    </form>
    </body>
    </html>

    Pomocí tohoto formuláře odešleme skriptu heslo a login. V dalším souboru zpracujeme získané údaje.

    <?php

    Define 
    ('file''pswd.txt');                   //CESTA K SOUBORU S HESLY
    Define ('server','http://muj.server.cz/');     //ADRESA WWW STRANEK

    $data = @File(file) or Die('Nastala chyba');  //NACTENI OBSAHU SOUBORU DO POLE

    foreach ($data AS $v)
    {
      List (
    $pswd$login) = Explode (':'$v); //ROZDELENI RADKU NA HESLO A LOGIN
      
    if (Trim($login) == Trim($_POST['log']))
      {
        if (
    Trim($pswd) == MD5(Trim($_POST['pwd'])))
        {
          
    //POKUD JE HESLO A LOGIN SPRAVNE PRESMERUJEME SKRIPT NA CHRANENY SOUBOR
          
    Header ('Location: '.server.'top_secret.php?pswd='.$pswd.'&login='.$login);
          exit;
        }
        else
        {
          
    Header ('Location: '.server.'bad_login.php');   //SPATNY LOGIN
          
    exit;
        }
      }
    }

    Header ('Location: '.server.'bad_login.php');   //SPATNY LOGIN
    exit;

    ?>

    Nejdřív načteme soubor pswd.txt a rozdělíme ho na jednotlivé řádky. Tyto řádky pomocí funkce Explode() rozdělíme na heslo a login. Pokud najdeme login, který se shoduje s loginem odeslaným formulářem, tak porovnáme příslušná hesla. K šifrování hesel je zde využita funkce MD5() (lze samozřejmě použít jakoukoliv jinou). Pokud souhlasí i heslo, přesměrujeme skript na zaheslovaný soubor (pomocí URL předáme šifrované heslo). Pokud heslo nesouhlasí, přesměrujeme skript na stránku s chybovým hlášním. Stejně tak i v případě, že nenalezneme existující login. Použitím funkce Trim() se zbavíme zbytečných mezer na začátku a konci dat z formuláře.

    Příklad souboru pswd.txt.

    90a5986b4ad6a343034ee373b9dc59b9:hugo
    e7459320144ddbca11855247ae117521:jirka
    aa145cc54558842bb21aa77dac185672:lenka
    54dd584c1447a4455e55411ee45e7745:pavel

    Teď máme ošetřený přístup k souboru přes vstupní formulář. Ale pokud by někdo zjistil adresu souboru a zadal ji do prohlížeče, tak se mu zobrazí obsah i bez zadání hesla. Proto je lepší vložit kousek kódu přímo do začátek souboru, který chceme chránit.

    <?php

    Define 
    ('file''pswd.txt');                   //CESTA K SOUBORU S HESLY
    Define ('server','http://muj.server.cz/');     //URL STRANEK

    $data = @File(file) or Die('Nastala chyba');  //NACTENI OBSAHU SOUBORU DO POLE

    foreach ($data AS $v)
    {
      List (
    $pswd1$log1) = Explode (':'$v);
      
    $pswd[] = Trim($pswd1);
      
    $log[] = Trim($log1);
    }
    //NAJDEME POLOZKU POLE $log, KTERA ODPOVIDA ODESLANEMU LOGINU
    $key Array_Search ($_GET['login'], $log);
    //POKUD JE LOGIN NEBO HESLO SPATNE, TAK PRESMERUJEME VYSTUP NA STRANKU
    //S CHYBOVYM HLASENIM
    if ($key === false || $pswd[$key] != $_GET['pswd'])
    {
      
    Header ('Location: '.server.'bad_login.php');
      exit;
    }
    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

    <html>
    <head>
    <title>Super tajná stránka</title>
    <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
    </head>

    <body>
    <h1>TOP SECRET - EYES ONLY</h1>
    </body>
    </html>

    V tomto skriptu jsem použil jiný způsob prohledávání pole a to sice pomocí funkce Array_Search(), která vrací klíč prvku pole, jenž obsahuje zadaný řetězec. Pokud je login i heslo v pořádku tak se nám zobrazí obsah souboru, v opačném případě budeme přesměrováni na stránku s chybovým hlášením.

    Tento způsob zaheslování přístupu k souborům je vhodný pouze pro html soubory, nedá se použít pro obrázky, příp. PDF dokumenty apod. Pro ochranu těchto souborů musíme využít databáze nebo ochranu pomocí souboru .htaccess.

    Seznam použitých funkcí

    Array_Search, Define, Die, Explode, File, Header, List, MD5, Trim

    LICENCE

    Všechny skripty na tomto webu jsou poskytovány, pokud není uvedeno jinak, bez jakýchkoliv licenčních požadavků a také bez záruk.