Skrytá hrozba: KTTV a WWW

Title Skrytá hrozba: KTTV a WWW
Author Jan Liška
Date 1. 11. 1999
Reference
File plpoint/docs/phmenace.html
Project KTTV
Version $Id: phmenace.html,v 2.2 1999/11/02 15:40:14 martin Exp $
Shrnutí: Tento dokument si klade za cíl shrnout různé možnosti spolupráce programu KTTV v prostředí World Wide Webu, způsoby publikování dokumentů vytvořených pomocí KTTV na WWW, spolupráci KTTV s webovskými servery a skrytá nebezpečí, která se v této problematice skrývají. Pro účely dalšího textu má tento dokument status RFC.

Obsolete: Uživatelská příručka do verze 1.21 včetně, informace ze zápisů do zápisu č. 45 včetně.


Projekt KTTV má už od počátečních fází svého vývoje úzkou vazbu na WWW. Formát souborů je navržen tak, aby vyhovoval standardům HTML a vlastní text dokumentů tak bylo možno prohlížet v běžném HTML prohlížeči. Oproti HTML je do formátu zahrnuto několik rozšíření ve formě speciálních tagů, které obyčejný WWW prohlížeč ignoruje.

Jedná se zejména o tagy <presentation>, tagy pro formátování stránek a tvorbu slidů. Zatímco první dva druhy nejsou při publikaci na WWW třeba, pro zachování smyslu dokumentu je třeba nějak zahrnout do výsledné WWW stránky i běžným prohlížečem nezobrazitelné slidy.

Během vývoje vyvstalo několik možností, jak danou problematiku řešit:

Další otázkou pak je, jak má případně vypadat onen program, který bude jednotlivé slidy generovat. Možnosti jsou v podstatě dvě: Buď se bude jednat o zcela zvláštní program, jakýsi "odlehčený" KTTV, či tento úkol zastane samotné KTTV pomocí přepínače na příkazové řádce.

Po diskusi na schůzce projektu 26. 10. 1999 jsme zamítli řešení pomocí specializovaného programu - tvorba takového nástroje by trvala poměrně dlouho a je sporné, jakých úspor v náročnosti na paměť či rychlosti provádění by se podařilo dosáhnout (většina paměťových nároků jde stejně na vrub wxWindows). Vzhledem k návrhu programu je použití wxWindows nutné a případná tvorba pouhého generátoru slidů bez jejich účasti je časově nereálná.

Pokud se budeme zabývat dynamickou tvorbou slidů přímo na straně WWW serveru, musíme na jeho straně předpokládat funkční instalaci programu KTTV. To ovšem skrývá svá úskalí: KTTV ke své práci potřebuje knihovny wxWindows a Xwindows. Navíc je vysoce nepravděpodobné, že by se KTTV podařilo roběhat bez spuštěných Xwindows, což okruh vhodných serverů omezuje nehoráznou měrou - nehledě na to, že k běžné instalaci KTTV jsou třeba práva superuživatele (instalace RPM balíků).

I kdybychom pominuli potíže s instalací a spouštěním, případně měli k disposici server se všemi potřebnými knihovnami, zůstává otazník nad paměťovou náročností KTTV. Dynamicky linkovaný kód zabírá v paměti 1.2MB na každou instanci, plus 3.7 MB sdílených knihoven. Každý přístup k dokumentu KTTV by tedy obsadil téměř 4MB paměti, pokud nepočítáme se statickým linkováním, kde je celá statistika ještě daleko černější. Nejenže tak zcela vypadává ze hry varianta 1) (spouštět KTTV pro každý slide), ale je prakticky nereálné používat i metodu 2) - nahrávání a uvolňování sdílených knihoven by neúnosně zatěžovalo server a load average by letěl ke hvězdám - nemluvě o drahocenném paměťovém prostoru.

Varianta 2) navíc ke své činnosti vyžaduje právo zápisu na disk. To má ovšem za následek bezpečnostní rizika, a to i v případě kdy se spokojíme s ne-SUID programem. I jen základní kontroly kódu KTTV proti úmyslnému přetečení bufferů by si vyžádaly mnoho hodin (zejména na straně parseru), nemluvě o tom, že webmasteři (když už vůbec povolí používat CGI) leckdy vyžadují audit kódu svými lidmi.

Jediným realistickým řešením se zdá být třetí metoda, při které uživatel sám po vytvoření dokumentu zvolí "export do HTML". Program vygeneruje patřičné slidy a pomocí tagů <IMG> je prováže s KTTV dokumentem (tagy slidu přitom v dokumentu zachová - jednak nebude nutné udržovat dvě verze stejného dokumentu, jednak si bude kterýkoliv šťastný držitel KTTV moci prohlédnout dokument tak, jak má skutečně vypadat, aniž by musel z WWW stahovat obrázky slidů). Jistou nevýhodou samozřejmě zůstává nutnost manuálního updatu obrázků při každé změně slidu, v porovnání s ostatními metodami se však jedná o nevýhodu nepatrnou a pozornosti nehodnou.