O obcházení bezpečnostní politiky

K čemu vlastně máme všechny ty bezpečnostní politiky v prohlížečích? Vždyť jen brzdí kreativitu a nutí vývojáře vymýšlet obezličky a hacky, kterými je více či méně důmyslně obejít… Mají smysl, nebo byste taky všechny tyhle bezpečnostní opatření, které každého jen obtěžují, zakázali?

Včera jsem přednášel studentům o HTML5 a po přednášce, v diskusní části, jsem dostal od jednoho studenta dotaz, se kterým jsem si, upřímně řečeno, nevěděl moc rady. Ten dotaz zněl bezelstně a upřímně:

„Já při tvorbě občas narážím na bezpečnostní politiky v prohlížečích, které mi neumožňují dělat to či ono, například nemohu ze skriptu v iframe měnit obsah rodičovské stránky. Nevíte, jak si může vývojář tyhlety pravidla vypnout, povolit, obejít…?“

Studentovi jsem odpověděl, ale později cestou domů jsem nad tou otázkou přemýšlel a díval jsem se na ni z více stran. Ona totiž není tak jednoznačná, jak by se na první pohled zdálo.

Odpověděl jsem upřímně, že nejsem znalec prohlížečů a že je hypoteticky možné, že v nějakém existuje nějaké nastavení, které potlačí třeba kontrolu same origin, ale po pravdě řečeno jsem se po téhle možnosti nikdy nepídil. Pokud jsem na podobný problém narazil v praxi, snažil jsem se ho vždy vyřešit nějakým legitimním způsobem.

Ale ta otázka mě zaujala, takže jsem tazateli položil protiotázku: Proč byste to chtěl dělat, a proč zrovna takhle? To by si každý, kdo na takovou stránku přijde, musel vypnout bezpečnostní zásady v prohlížeči, aby mu fungovala tak jako vám?


kodakgold

Považuji totiž takový přístup za nebezpečný. Nutit uživatele, aby si vypnul bezpečnostní mechanismy, je nejrychlejší cesta do pekel. Vybavil jsem si případ firmy, kde jsem kdysi pracoval. Její ředitel byl proslulý tím, že rád chodil na stránky, řekněme, hambatého charakteru, a pravidelně jednou do měsíce přišel a říkal: „Kluci, ten notebook mi nějak nejede, je to pomalý, asi to bude potřeba přeinstalovat nebo přidat paměť…“ Když notebook přinesl, stačilo na něj pustit antivir, vyházet zhruba 30–40 kousků, kterými si zasvinil systém, a stroj běhal jako znovuzrozený.

Po několika měsíčních cyklech nás to přestalo bavit, a nainstalovali jsme firewall. Ředitel dostal velmi přísné instrukce („Když se to bude ptát zničeho nic, jestli nějaký program, co jste nespouštěl, smí přistoupit na web, dejte NE“) a pro jistotu jsme nastavení zaheslovali. Po pár týdnech přišel kolega v pondělí do práce skleslý a vyprávěl, jak mu ředitel v noci v sobotu telefonoval, že to heslo chce a že to chce vypnout, protože se nemůže dostat na stránky obchodního partnera, kterému chce zpracovat nabídku…

Za pár dní byl notebook zase pomalý… Ptali jsme se ředitele, jak se to, u všech všudy, mohlo stát. No a on odpověděl, že vlezl na ty stránky obchodního partnera, ale tam mu to nic nedělalo, nechtělo ho to pustit dál a furt se to ptalo, jestli smí program XYZ přistupovat k webu. On poctivě mačkal NE, ale furt ho to tam nechtělo pustit. Tak nakonec dal ANO, a pak se teprve dostal dál a mohl pokračovat, dodělat tu nabídku a zachránit firmu.

Od té doby jsem přesvědčen, že by uživatelé nejen neměli mít možnost měnit bezpečnostní nastavení, ale někteří by ani neměli vědět, že tam nějaká jsou. Ideální bezpečnostní politika je taková, o níž běžný uživatel ani neví, kterou musí znát jen vývojář a musí vědět, jak se jí vyhnout.

Teď to vypadá, že si protiřečím, ale není tomu tak. Obejít bezpečnostní politiku je výzva, která nutí vývojáře k zamyšlení: Opravdu to, co řeším, lze řešit tak, že poruším politiku a obejdu ji? V čem mi ta politika brání a proč?

Studentovi jsem nakonec řekl, že mi to nepřipadá jako dobrý nápad, ani pro nějaké uzavřené prostředí „opravdu zodpovědných lidí“, a už vůbec nemyslím, že je dobré řešit problémy s bezpečností vypínáním bezpečnostních kontrol. A to platí nejen v IT.

Kdysi na střední škole jsme chodili na brigády do blízkého polygrafického závodu, kde dělníci pracovali na řezačkách. Do řezačky dělník zasune štos listů, ten si stroj přimáčkne a na pokyn obsluhy je seřízne silným a ostrým nožem. Kvůli bezpečnosti se spouštěl nůž současným stisknutím dvou tlačítek na přední straně stroje, které byly umístěné tak, že je obsluha musela zmáčknout oběma rukama – což zabraňovalo tomu, že by se stroj spustil a dělník měl jednu ruku někde v prostoru stroje. Dělníci ovšem sami sebe považovali za fachmany, odborníky, staré zkušené ostřílené borce, a na tyhle „inžinýrský vymyšlenosti“ nadávali kudy chodili. Že je to zdržuje, že by druhou rukou mohli hned za nožem přidržovat ten štos odřezků a dávat je pryč. Vyřešili to nakonec tím, že jedno z tlačítek zablokovali pomocí kusu složeného papíru v pozici „zapnuto“, a ovládali vše jen jedním. Důsledky si dovedete představit. (Nakonec vše vyřešila světelná závora – ale na jak dlouho, to netuším.)

I mezi uživateli prohlížečů je velká spousta fachmanů, odborníků a starých zkušených ostřílených borců, které bezpečnost jen otravuje, takových, kteří by i na otázku „Smí tato stránka přistoupit k vašemu disku a stáhnout si z něj, co chce?“ odpověděli ANO. Někteří kvůli těm slečnám, jiní kvůli principiálnímu odporu k zákazu.

Ale nic není černobílé a ve vlaku začal hlodat červík pochyb.

Jsme obklopeni zákazy, které mnohdy nedávají na první pohled smysl. A nutno přiznat, že jej leckdy opravdu nemají. Spousta lidí, a v ČR to je téměř národní sport, zkrátka zákazy, které nedávají smysl, ignorují. Problém je, že jejich smysl posuzují oni sami a většinou na základě své situace. Málokdo se nad zákazem zamyslí v obecné rovině (a to platí i pro zakazující); málokdo vnímá zákaz jako výraz svobody („mohu dělat všechno to ostatní!“), častěji se s ním setkáváme ve chvíli, kdy nám v něčem brání.

advocatus diaboli pokračoval: Vždyť přeci spousta novinek a revolučních věcí vznikla právě v místech, kde někdo odvážný překročil pravidla. Odvážil se jít proti pravidlům a rozbořit je zvenčí. Posunout vývoj dopředu… Francouzští kubisté vzali tehdejší pravidla malby a popřeli téměř každé, na které přišli. Kulturní vzedmutí 60. let bylo na revoltě a popření pravidel založené… Co když díky možnosti obejít bezpečnostní politiku právě tenhle student objeví něco, nějakou zajímavou techniku, postup, něco, co se bude za dva roky nazývat šílenstvím a za pět let průmyslovým standardem? Není to spíš ukázka svobodomyslného přístupu k tvorbě, přístupu nesvázaného bezpečnostními politikami a omezeními, které se leckdy v zápalu tvůrčího rozmachu zdají naprosto hloupé („Vždyť by přece stačilo, aby tohle šlo vypnout…“)

Jenže je tu jedno jenže. K tomu, aby výrazný a svobodomyslný jedinec mohl ignorovat bezpečnostní pravidlo, smysluplně pak využít možností, které dosud nebyly možné, a přesvědčit zbytek světa, že výhody převažují nad riziky, je potřeba, aby nejprve pochopil důvody, principy a důsledky onoho zákazu. Aby věděl nejen jak jej obejít, ale i kdy jej obejít a hlavně proč. A aby dokázal, že odvolání zákazu má smysl. Experimentátoři s formou neexperimentovali proto, že ji nezvládali – zvládali ji tak dobře, že se jejich ničení proměnilo v tvorbu.

Upřímně řečeno nevím, jestli tazatel patřil do této kategorie, a v malém koutku duše doufám, že ano, a opravdu mu přeju, aby pomocí obejití zákazu objevil nějakou skvělou netušenou možnost. Ovšem obávám se, že u většinu webdesignérů je podobná snaha výrazem nedostatečných znalostí: „Nejde to tak, jak chci já, takže musíme změnit pravidla, protože mě nenapadá jiný způsob.


mzacha

Bezpečnostní politiky mají i pro vývojáře ten pozitivní vliv, že si při jejich obcházení často uvědomí, že by šlo vše řešit jinak, transparentněji, elegantněji, ne balancováním na hraně možného. Mnoho článků, které přinesly poměrně zásadní webkodérské novinky, začíná variantou na „řešil jsem problém, jak překonat to a to omezení, a nakonec jsem přišel na úplně jiné řešení…

Ale na druhou stranu, opět našeptával čertík, vždyť i ta slavná same origin policy je vlastně taky prolomená. Hacky na její obcházení jsou známé a dnes už existují legální způsoby, jak ji obcházet (CORS). Jenže ji neobcházejí vypnutím bezpečnostní politiky, ale jejím, řekněme, zpřesněním, kdy za určitých specifikovaných podmínek nemusí platit.

Nevím, možná i na počátku CORS stál student, který se ptal „… jak v prohlížeči vývojář vypne same origin policy?

Nakonec jsem studentovi doporučil, že pravděpodobně nejjistější způsob, jak takový prohlížeč pro vědecké účely sestrojit, je vytvořit si svůj vlastni Chrome nebo Firefox, přeložit si jejich zdrojové kódy a zablokovat v nich kontrolu těchto bezpečnostních opatření. Ale pokud bude chtít někdy vytvářet webové stránky pro lidi, měl by mít takový prohlížeč, který budou mít jeho klienti.

A tahle zásada je pravděpodobně nejdůležitější: Vyvíjejte pro standardní nástroje a dbejte toho, aby i vaše řešení používalo standardní metody. Snažte se pochopit důvod bezpečnostních omezení a záměr jejich autorů. Snažte se je nikoli obcházet, ale stavět svoje dílo tak, aby na ně nenaráželo. A pokud je nakonec přeci jen obejdete či odstraníte, dvakrát přemýšlejte, jestli jste náhodou nepustili šídlo z pytle…

Co myslíte, jsou bezpečnostní politiky užitečné, potřebné a měly by zůstat i pro vývojáře, nebo by měli mít vývojáři nástroj bez těchto omezení, aby si mohli rychleji otestovat to co potřebují a nakonec omezení nějak obejít? Nebo je to špatná cesta a vznikly by tak paskvily, plné záplat a hacků? 

Ilustrační foto: sxc.hu

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 49

Přehled komentářů

limit_false "Krasny" odstrasujici priklad
limit_false Re: "Krasny" odstrasujici priklad
limit_false Re: "Krasny" odstrasujici priklad
Re: "Krasny" odstrasujici priklad
anonym Re: "Krasny" odstrasujici priklad
NobodyWasHere Re: "Krasny" odstrasujici priklad
BobTheBuilder Re: "Krasny" odstrasujici priklad
v6ak Android?
limit_false Re: Android?
František Kučera Re: Android?
pas Re: Android?
v6ak Re: Android?
Mintaka Mám rád
Radek Hulán bezpečnostní politika
Oldis Re: bezpečnostní politika
imploder same origin policy
Jiří Kosek Re: same origin policy
imploder Re: same origin policy
Martin Malý Re: same origin policy
v6ak Re: same origin policy
imploder Re: same origin policy
Jiří Kosek Re: same origin policy
imploder Re: same origin policy
v6ak Re: same origin policy
imploder Re: same origin policy
v6ak Re: same origin policy
imploder Re: same origin policy
v6ak Re: same origin policy
imploder Re: same origin policy
v6ak Re: same origin policy
imploder Re: same origin policy
v6ak Re: same origin policy
imploder Re: same origin policy
imploder Re: same origin policy
v6ak Re: same origin policy
imploder Re: same origin policy
Jakub Vrána Re: same origin policy
imploder Re: same origin policy
imploder Re: same origin policy
bauglir Re: same origin policy
bauglir Re: same origin policy
imploder Re: same origin policy
Jenda Re: same origin policy
imploder Re: same origin policy
Rado2 Re: same origin policy
mmad Příklad
hloupý Nemouš Nesmyslné politiky
budulinek Re: Nesmyslné politiky
Jakub Vrána Schránka
Zdroj: https://www.zdrojak.cz/?p=3389