Mechanizmus byl navrhnut s cφlem poskytnout co nejjednoduÜÜφ, ale pln∞ pou₧iteln² k≤d, kter² by bylo velmi snadnΘ implementovat. Ke svΘ Φinnosti pot°ebuje tabulku <SPAN Class=CODE>users</SPAN>, ve kterΘ bude p°ihlaÜovacφ jmΘno ulo₧eno ve sloupci <SPAN Class=CODE>nick</SPAN> a heslo v <SPAN Class=CODE>password</SPAN>. Pro jednoduchost se hesla uklßdajφ do databßze v otev°enΘ podob∞, ovÜem dopsat k≤dovßnφ n∞kterou hashovacφ funkcφ je velmi jednoduchΘ.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Skript poskytuje n∞kolik funkcφ najednou. Pokud jsou zjiÜt∞ny neprßzdnΘ prom∞nnΘ z logovacφho formulß°e, systΘm se pokusφ u₧ivatele p°ihlßsit. Dßle je v k≤du vid∞t d∙le₧itß funkce, kterß mß na starosti generovßnφ autorizaΦnφch °et∞zc∙ a poslednφ Φßst provßnφ klasickou kontrolu stßvajφcφho spojenφ, tj. zda se n∞kdo nepokusil session ukrßst.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
K≤d umo₧≥uje jak fixaci spojenφ na jednu IP adresu, tak mo₧nost vyprÜenφ platnosti po urΦitΘm ΦasovΘm limitu. BezpeΦnost t∞chto funkcφ je zajiÜt∞na tajnostφ prom∞nnΘ <SPAN Class=CODE>$SecretCode</SPAN>. P°i jeho zkompromitovßnφ m∙₧e ·toΦnφk p°i znalosti hesla vytvß°et autorizaΦnφ °et∞zce k jakΘkoliv IP adrese a jakΘmukoliv Φasu.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
P°istupme nynφ k vlastnφmu zdrojovΘmu k≤du.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<PRE><SPAN Class=CODE>// nejprve je potreba se pripojit do databaze
Prvnφ °ßdky p°edstavujφ inicializaci. V souboru <SPAN Class=CODE>connect.php</SPAN> se provede p°ipojenφ k databßzi, dßle se nastavφ tajn² °et∞zec, kter² si pochopiteln∞ p°i vlastnφ implementaci zm∞≥te. Nßsleduje funkce, kterß v zßvislosti na jmΘnu, heslu a ΦasovΘm ·daji vracφ autorizaΦnφ °et∞zec. Ten se spoΦφtß jako v²sledek jednocestnΘ hashovacφ funkce n∞kolika spojen²ch °et∞zc∙. <SPAN Class=CODE>$REMOTE_ADDR</SPAN> vracφ klientovu IP, <SPAN Class=CODE>$HTTP_USER_AGENT</SPAN> informace o prohlφ₧eΦi a operaΦnφm systΘmu (proΦ je nezahrnout..., bude to o n∞co bezpeΦn∞jÜφ).
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
╚asov² ·daj se bere v sekundßch od p∙lnoci 1. 1. 1970, tento ·daj se ale d∞lφ hodnotou 600 (tj. 10 min) a zaokrouhluje. ╚asov² limit funguje tak, ₧e se p°i kontrole platnosti °et∞zce testujφ t°φ vypoΦtenΘ: jeden pro aktußlnφ Φas a poslednφch 10 minut, jeden pro interval p°ed 10ti-20ti minutami a jeden pro Φas od 20ti minut zp∞t do p∙l hodiny. Tφm lze dΘlku limitu nastavit.
@$GetUser = MySQL_Query("SELECT * FROM users WHERE nick LIKE '".AddSlashes($LogNick)."'");
$User = MySQL_Fetch_Array($GetUser);
// Uspech?
if ($User["Password"]==$LogPassword) :
$Nick=$LogNick;
$AuthString=AuthString($LogNick,$LogPassword);
else:
echo "Log FAILED.";
endif;
// Posleme login name a autoritzacni retezec
SetCookie("Nick",$LogNick);
SetCookie("AuthString",$AuthString);
}</SPAN></PRE>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Pokud jsou nenulovΘ prom∞nnΘ, ve kter²ch se p°edpoklßdajφ ·daje z formulß°e (<SPAN Class=CODE>$LogNick</SPAN> a <SPAN Class=CODE>$LogPassword</SPAN>) systΘm se pokusφ nalogovat. Nßsleduje kontrola aktußlnφho autorizaΦnφho °et∞zce, kterß se provßdφ v₧dy (v p°edchozφm p°φpad∞ by bylo mo₧no ji vynechat, ale tφmto se nic nepokazφ).
// vse ok, posleme autorizacni retezec s novou casovou znamkou
$AuthString=AuthString($Nick,$User["password"]);
SetCookie("AuthString",$AuthString);
echo $AuthString;
else:
SetCookie("Nick","");
SetCookie("AuthString","");
Header("Location: login.php");
Die();
endif;
}
else //neni k dispozici autorizacni retezec
{
Header("Location: login.php");
Die();
}</SPAN></PRE>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Zb²vß dodat, ₧e jeliko₧ je vÜe v jednom souboru, je mo₧nΘ se z logovacφho formulß°e odkazovat ihed na prvnφ strßnku aplikace. Pokud je skript sprßvn∞ vlo₧en jeÜt∞ p°ed jak²koliv v²stup (musφ b²t-jinak by se neposlaly cookies), provede se nalogovßnφ samo.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
DalÜφ vychytßvky si nechßme na p°φÜt∞. Knihovnu si m∙₧ete sßhnout <a href=material/tillda/security.php_>zde</a>.
</SCRIPT><OL Class=None Type=Disc><LI style='margin-left:20px;' class=LinkItem><a href=articles.php@ID=32><SPAN Class=SeeAlso>BezpeΦnost a autorizace na WWW I. : protokol HTTP</SPAN></a><LI style='margin-left:20px;' class=LinkItem><a href=articles.php@ID=162><SPAN Class=SeeAlso>BezpeΦnostnφ nedostatky i na presti₧nφch zpravodajsk²ch webech z oblasti ICT</SPAN></a></OL><SCRIPT>
nie('<br>');AdditionalTablesBegin();
CommentsBegin('Webovß autorizace snadno a rychle',2);