V druhém článku o  „Tables PHP procesor“ vám ukáži, jak zabezpečit aplikaci, aby tabulky mohli upravovat pouze určití uživatelé. Ochranu však lze použít i pro jiné programy než TPP. Celý zabezpečovací systém nepotřebuje nic jiného než standardní instalaci PHP.

Tables PHP procesor 1.1

Jediným, ale podstatným rozšířením oproti verzi 1.0 je zabezpečení přístupu k tabulkám a jejich správa. Celé zabezpečení je postaveno na posílání formulářových dat, aby se TPP nevázalo na nic jiného než PHP. Všem stránkám je nastavena okamžitá expirace (tj. nelze ji zobrazit z historie prohlížeče), aby bylo zamezeno zneužití dat.

Zabezpečení a autorizace uživatelů

Při otevření TPP se vám nejdříve zobrazí přihlašovací dialog. Při stažení verze TPP 1.1 je vytvořen automaticky uživatel web_admin (správcem, který má přístup ke všem tabulkám a účtům, je každý uživatel obsahující ve jméně _admin) s prázdným heslem. Odeslaná data zpracuje script authorization.php, který data ověřuje na každé stránce:

if (@$user)
//zjistí jestli je zadáno uživatelské jméno
  {
   $usr=@file(‚users/‘.$user.‘.php‘); //načte heslo ze souboru, ve kterém je uloženo (soubor se nazývá [login].php, kde [login] je jméno uživatele), soubor je chráněn před nepovolanými zraky PHP komentářem, který se neodesílá prohlížeči
   if (!$usr)
     {
      header(‚location: http://‘.$_SERVER[„HTTP_HOST“].eregi_replace(‚([^/]*).php$‘,“,$_SERVER[„SCRIPT_NAME“]).’login.php?alert=1′);
      exit;
     } //ověří, jestli uživatel vůbec existuje, pokud neexistuje, vrátí uživatele na přihlašovací formulář
   $pass = (!eregi(‚^([0-9]*)$‘,$pass)) ? bin2hex(bin2hex($pass)) : $pass; //zakóduje heslo do číselné podoby
   $usr[1] = eregi_replace(‚
‚,“,$usr[1]); //odstraní z uloženého hesla odřádkování na jeho konci
   $usr[1] = bin2hex(bin2hex($usr[1])); //porovnání hesel
   if ($usr[1]!=$pass)
     {
      header(‚location: http://‘.$_SERVER[„HTTP_HOST“].eregi_replace(‚([^/]*).php$‘,“,$_SERVER[„SCRIPT_NAME“]).’login.php?alert=2′);
      exit;
     } //pokud heslo nesouhlasí vrátí uživatele zpět na přihlašovací formulář
   header(‚Pragma: No-cache‘);
   header(‚Cache-Control: No-cache, Must-revalidate‘);
   header(‚Expires: ‚.gmdate(‚D, d M Y H:i:s‘).‘ GMT‘);
   settype($directory, ‚string‘);
   $directory = (eregi(‚_admin‘,$user) and $directory!=“) ? $directory : $user; //zajistí možnost administrace všech tabulek správci
  }
else header(‚location: http://‘.$_SERVER[„HTTP_HOST“].eregi_replace(‚([^/]*).php$‘,“,$_SERVER[„SCRIPT_NAME“]).’login.php‘); //když není zadáno uživatelské jméno, vrátí uživatele zpět na přihlašovací formulář

Ovládání TPP ve verzi 1.1 cs:

Ovládání TPP 1.1 je totožné s ovládáním TPP 1.0, které jsem popsal v článku TPP aneb tabulkový procesor v PHP I.. Pro normálního uživatele přibyl pouze přehled a možnost mazat tabulky na úvodní stránce dole. Přibyla zde však správa tabulek pro správce. Ten má na úvodní stránce přehled všech uživatelů, který může upravovat, a může také upravovat a mazat tabulky všech uživatelů.

Správa uživatelů

Správa uživatelů je povolena pouze pro správce. Nového uživatele tedy správce přidá po vyplnění údajů „login“ a „heslo“ v části úvodní stránky UŽIVATELÉ a odeslání dat pomocí tlačítka „Nový uživatel“. Po odeslání dat na server je zpracuje script users.php:

$file=fopen(‚users/‘.$us.‘.php‘, ‚w‘); // vytvoří se soubor se jménem uživatele, kam se uloží data o uživateli
fputs($file, ‚<? /* // aby nebylo možné zjistit údaje jinak než na serveru, je vše uvedeno jako poznámka v PHP
‚.$pw.‘ //zapíše se heslo
*/ ?>‘);
mkdir(‚tables/‘.$us.’/‘,770); //vytvoří adresář pro uživatelovy tabulky

Uživatel pak má práva vytvářet a mazat svoje tabulky. Jednotlivé uživatele je možno smazat po kliknutí na tlačítko „Smazat_login“ (kde login je login uživatele, kterého chceme smazat) vedle loginu uživatele, kterého chceme smazat, v seznamu. Tento krok vykonává opět script users.php:

eregi(‚Smazat_([^.]*).php‘,$unlink,$unlink); //zjistí jméno uživatele, uloži do proměnné $unlink[1]
unlink(‚users/‘.$unlink[1].‘.php‘); //smaže soubor s informacemi o uživateli a tím mu znemožní přístup k systému
$dir=dir(‚tables/‘.$unlink[1].’/‘); // otevře adresář, ve kterém měl uživatel tabulky
while ($item=$dir->Read())
  if (is_file(‚tables/‘.$unlink[1].’/$item‘))
   unlink (‚tables/‘.$unlink[1].’/$item‘); // postupně smaže všehny tabulky uživatele
$dir->Close(); //zavře adresář
rmdir(‚tables/‘.$unlink[1].’/‘); //smaže adresář, ve kterém měl uživatel uloženy tabulky

Přidání nového správce

Protože většinou jeden člověk nezvládne vše, může správce vytvořit nového správce stejným způsobem jako nového uživatele, pouze do kolonky login musí doplnit „_admin“. Po odeslání dat na server zpracuje script users.php stejným způsobem data jako při přidávání nového uživatele a přidělí mu práva správce, který může přidávat nebo mazat nové uživatele, vytvářet a mazat všechny tabulky.

Správa tabulek pro správce

Přehled tabulek uživatele získá po stisknutí tlačítka se jménem uživatele ve sloupci zvolit. Ty potom může v přehledu dole na stránce mazat, či si je otevřít a upravit jako při normální úpravě vlastní tabulky (před otevřením se mu vypíše jméno uživatele do pole uživatel ve formuláři pro otevření tabulky).

Nová verze TPP

V nové verzi je také vylepšené nahrazování uvozovek, které bylo upraveno po připomínkách k předešlému článku. Novou verzi je TPP si můžete z Intervalu stáhnout nebo rovnou vyzkoušet. Oficiální stránky najdete najdete na TPP.SignaLy.cz.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět