Na domácím fileserveru, který používám pro zálohování svého serveru a noteboků jsem právě kvůli rychlosti nasadil ReserFS ve verzi 4. Zhruba 2 roky jsem nepozoroval žádné problémy, ale pak jsme se přestěhovali a momentálně nám zhruba jednou měsíčně vyhodí pojistky. Continue reading
Category Archives: Na internetu
Krita – grafika pro KDE
Když jsem kdysi přecházel na desktopu na GNU/Linux, tak jsem poměrně úspěšně nacházel alternativy ke stálicím na Windows desktopu. Problémy jsem měl v podstatě jen ve dvou případech. Continue reading
Zpomalte si procesor
Většina lidí, tedy hlavně hráčů, se snaží ušetřit na ceně procesoru, grafické karty nebo pamětí. Ztracený výkon se potom snaží dohnat přetaktováním těchto komponent. To, že se mi to nelíbí, zde nechci rozpitvávat. Naopak se zaměřím na opačný problém – podtaktování. Continue reading
Přihlašování uživatelů do webové aplikace v PHP
Několikrát jsem již stál před problémem vytvořit přihlašování uživatelů do webové aplikace v PHP/MySQL. Vždy jsem to řešil úplně od začátku. Nedávno opět přišel požadavek na vytvoření aplikace včetně přihlašování uživatelů, tak jsem se konečně rozhodl napsat “něco” univerzálnějšího.
Vybavení
Jak jsem již uvedl výše, k realizaci přihlašování je potřeba PHP nainstalované jako modul serveru, databáze MySQL, ve které budou uloženi uživatelé a údaje o nich. Webový server Apache (aplikace by měla fungovat i na MS IIS, bohužel nemám možnost to vyzkoušet) a prohlížeč s podporou “Cookies”.
Možnosti přihlašování
Vymyslet kam ukládat data nedalo moc práce. Databáze se pro tento účel přímo nabízí. Protože používám MySQL, padla volba na ni. Asi nedůležitější problém bylo určit typ autorizace nebo lépe řečeno cestu předávání údajů od klienta serveru. Zde je na výběr z několika možností.
HTTP autentifikace. Ta mi připadá poněkud nebezpečná z důvodu předávání jména a hesla při každém požadavku v hlavičce a to u typu Basic dokonce v čistém textu. Její výhodou je snadnost použití. Prohlížeč totiž předává po přihlášení přihlašovací jméno uživatele a heslo automaticky bez dalších zásahů.
Session autentifikace. Další možností je tedy nepřímé předávání za pomocí session, kde může být použito ověření podle údajů z formuláře. Dále není nutné posílat heslo při každém požadavku, ale stačí předávat jednoznačně určitý řetězec. Nevýhodou je větší množství práce, protože nám prohlížeč nic neulehčí a vše musíme kontrolovat sami. Ještě že má PHP alespoň výborný session management. Bez něj by to bylo složitější.
Zvolil jsem tedy z důvodu bezpečnosti druhou metodu: přihlašování pomocí sessions.
Přihlášení uživatele
Při úspěšném přihlášení uživatele je vygenerován náhodný řetězec, který se uloží do databáze do položky daného uživatele, a zároveň se zapíše do session proměnné. Tam si uložíme i přihlašovací jméno uživatele. To sice není nutné, ale pro ladění je snadnější jej stále mít na očích.
Z bezpečnostního hlediska je dobré kontrolovat i IP adresu přihlášeného uživatele, takže si ji také zapíšeme do databáze. Další věcí, kterou budeme kontrolovat, je doba posledního přístupu uživatele. Tím získáme možnost jej automaticky odhlásit po určité době nečinnosti. Snažil jsem se o co nejjednodušší přístup a ovládání, a proto jsem se rozhodl pro maximální samostatnost. Tu umožní zabalení potřebných funkcí do třídy login.
Databáze
Samozřejmě je důležité nastavení databáze pro uživatele, který se připojí. To zde však popisovat nebudu, protože předpokládám funkční alespoň základní nastavení. V souboru includes/db_init.php probíhá připojování, takže je nutné nejdříve změnit hodnoty $myhostName, $mydbName, $myuserName a $myPW na takové, aby odpovídaly vašemu nastavení. Nyní je nutné vytvořit databázi nebo jen tabulku s uživateli. K tomu nám pomůže následující SQL dotaz.
CREATE TABLE test_users (
id int(11) NOT NULL auto_increment,
username varchar(20) NOT NULL default ”,
pw varchar(32) NOT NULL default ”,
firstname varchar(16) NOT NULL default ”,
lastname varchar(16) NOT NULL default ”,
session varchar(32) NOT NULL default ”,
ip varchar(15) NOT NULL default ”,
lasttime datetime NOT NULL default ‘0000-00-00 00:00:00’,
UNIQUE KEY id (id)
) TYPE=MyISAM;
Protože jsou hesla v databázi hashovány metodou md5, zde je část PHP kódu, který vloží uživatele “test” s heslem “test” do databáze. Samozřejmě musí předcházet připojení k databázi.
$myusername=”test”;
$mypw=md5(“test”);
$query=”INSERT INTO test_users SET username='”.$myusername.”‘, pw='”.$mypw.”‘”;
$result = mysql_query($query,$db);
header.php
Pro základní autentifikaci nám tedy slouží soubor includes/header.php. Zde startujeme session, vnořením souboru includes/db_init.php se připojíme k databázi, inicializujeme třídu login, otestujeme zda zavolat metodu pro přihlášení /$login->first_login()/ nebo odhlášení /$login->logout()/ a vypíšeme html hlavičku.
<?
// soubor header.php
// zahájení relace session
session_start();
// připojení k databázi MySQL
include “includes/db_init.php”;
//načtení soboru s třídou login
include “includes/login.php”;
//inicializace třídy login
$login = new login;
//jestliže je proměnná logout nastavena na 1 provede se odhlášení
if($logout==1){
$login->logout();
}
// jestliže je odeslán přihlašovací formulář, testuje se jméno a heslo
if(isset($login_name) and isset($login_pw)){
$login->first_login();
}
// zobrazení hlavičky html dokumentu
?><html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso8859-2″ />
<!–<link rel=”stylesheet” media=”screen” type=”text/css” href=”style.css” />–>
</head>
<body>
login.php
Soubor login.php obsahuje definici třídy login a obsažené metody. Na začátku definujeme použité proměnné uvnitř třídy. Zde stojí za povšimnutí proměnné:
$login->is_logged – podle této proměnné můžeme zjišťovat, zda je uživatel přihlášen
$login->checktimelimit – doba neaktivity, po které uživatele odhlásíme.
V další části je konstruktor třídy. Tak se nazývá metoda pojmenovaná stejně jako třída /v našem případě login()/. Ta se provede automaticky při inicializaci třídy.
Zde vás mohou zarazit tři řádky s voláním metody test_sql(). Ty by měly odfiltrovat případný pokus o útok metodou SQL inject u vstupních dat.
// zabezpečení proti útokům typu SQL inject
$this->session_login_string=$this->test_sql($this->session_login_string);
$this->login_name=$this->test_sql($this->login_name);
$this->login_pw=$this->test_sql($this->login_pw);
Další důležitou položkou je proměnná $this->table, kde musíme mít nastaveno jméno tabulky, ze které získáváme údaje o uživatelích.
$this->table=”test_users”;
Metoda first_login() se stará o prvotní přihlášení uživatele. Zkontroluje údaje předané z formuláře, vygeneruje náhodný řetězec, zapíše řetězec a datum do databáze a řetězec s přihlašovacím jménem do cookies. Pokud se podařilo přihlásit, naplní ještě proměnné třídy metodou load(). Podle návratové hodnoty můžeme kontrolovat, zda se přihlášení zdařilo (1-true/0-false).
Metoda logout() se stará jak již název napovídá o odhlášení. Zapíše do databáze jiný string pro session a ukončí session relaci.
Metoda load() slouží pro načtení dat a jejich uložení do interních proměnných. Většinou je volána z metody logged().
Konečně metoda show_login_form() vypíše formulář pro přihlášení. Zde je požadováno uživatelské jméno a heslo.
index.php
Posledním souborem, který jsme neprobrali, je vlastně ten první. Přes něj vstupujeme na podstránky. Na začátku je vnoření souboru includes/header.php, přes nějž a návazně includes/login.php se provede vše spojené s přihlašováním. Ve zbytku souboru se již jen podle získané hodnoty v proměnné $login->is_logged rozhodujeme, jakou část kódu provedeme. Například když není uživatel přihlášen, zobrazíme formulář. Pokud je uživatel přihlášen, zobrazíme mu aktivní odkazy v menu. Ale to již záleží na vás, jakou funkčnost do aplikace zabudujete.
Doufám, že jsem vám byl alespoň trochu nápomocen. Snažil jsem se komentovat všechny důležité části, a dokonce jsem se přemohl a komentáře jsou i s nabodeníčky 😉
Zdrojový kód stahujte zde.
publikováno: www.abclinuxu.cz , 30.6.2003
Hacking bez tajemství – Webové aplikace
Kniha navazující na úspěšný titul Hacking bez tajemství je opravdovým Pokračováním s velkým P. Při čtení jejího předchůdce jsem celou dobu žasl, jak je možné maximum informací sdělit tak čitelnou formou a zároveň knihu učinit i přehlednou. To vše jak při hledání, tak i v návaznosti a vyváženosti jednotlivých kapitol. Nová publikace používá stejných grafických prvků a podobného členění jako její předchůdce, takže je i stejně dobře čitelná.
Všichni tvůrci opravdu pečlivě dbají na dodržení daných konvencí, takže když začínáte číst kapitolu od jiného autora než byla ta předchozí, většinou si toho ani nevšimnete.
Předběžná prohlídka
Kniha je rozdělena na tři části. První je nazvána “Předběžná prohlídka”. Zabývá se obecně jednotlivými typy útoků, stručně je popisuje a nastiňuje i typy řešení. Tato část stručně rozebírá následující témata.
- Úvod do bezpečnosti webových aplikací
-
Profilování
-
Hacking webových serverů
Útok
Druhá část se jmenuje “Útok” a zde jsou popsané bezpečnostní problémy rozebrány podrobně i s možnými nuancemi a do detailů vysvětleny možnosti obrany.
Každý z bezpečnostních problémů je v rozdělen na tři kroky.
- útok
- orientační tabulka s popisem a stupněm nebezpečnosti útoku
- možná obrana
V části “Útok” jsou jednotlivé kroky rozebrány podrobně. Tím však nechci říct, že by stačilo přečíst pouze první část, ta nám pouze ukazuje principy. Ve druhé je vše rozebráno včetně ukázek a popisu nástrojů používaných k získání hesel, hlaviček http přenosů nebo dalších důležitých údajů. Samozřejmě je zde i úplné vysvětlení, je-li to kvůli druhu problému možné, možnosti obrany a to opět vyčerpávajícím způsobem. Následující seznam obsahuje názvy rozebíraných typů útoků.
- Ověřování
- Autorizace
- Útoky na správu stavu relace
- Útoky na validaci vstupu
- Útoky na webová úložiště dat
- Útoky na webové služby
- Hacking správy webových aplikací
- Hacking webových klientů
Asi v polovině knihy jsem se pozastavil nad tím, že je v publikaci na můj vkus hodně screenshotů pro hacking pomocných aplikací (vetšinou ve windows verzi, ale téměř vždy existuje linuxový port, nebo jde přímo o port linuxové aplikace) a jsou mnohdy i přes půl strany. Zbytečně tak zabírají místo a prodražují knihu.
Přílohy
Konečně třetí část jsou přílohy. Zde se rozebírají akce související se zabezpečením webových aplikací, webového serveru nebo hackování svého serveru. Více vám napoví přímo názvy jednotlivých příloh.
- Seznam úkonů při kontrole
- bezpečnosti webového serveru
- Tahák s nástroji a postupy pro webový hacking
- Použití programu libwhisker
- Instalace a konfigurace nástroje UrlScan
- O doprovodných webových stránkách
Hodnocení
Informační hodnotou knihy jako celku jsem byl nadšen a je ke cti překladatelů, technických poradců a korektorů, že dílo nekazí ani chyby nebo překlepy (našel jsem pouze jeden).,To je u tohoto druhu technické literatury obzvláště chvályhodné.
Tímto bych recenzi ukončil a všem vám, kteří přemýšlíte o zakoupení, ji nemohu než doporučit. Jedná se o po všech stránkách kvalitní publikaci autorů, kteří jsou profesionálové v oboru bezpečnosti.
Přeji příjemné čtení :).
Název | Hacking bez tajemství – Webové aplikace |
Autoři | Joel Scambray, Mike Shema |
Vydal | Computer Press |
Datum vydání | 2003 |
Počet stran | 360 |
Doporučená cena | 390,- Kč / 585,- Sk |
publikováno: www.abclinuxu.cz , 3.6.2003