@ -29,7 +29,7 @@ Sledování a analýze nejčastějších chyb webových aplikací a serverů se
Většina těchto chyb se vztahuje právě k~dynamickým webovým aplikacím. Bezpečnost tedy závisí nejen na programátorovi, jenž aplikaci vytváří, ale také na tom, že programovací jazyk je bezpečně implementován. To nelze tvrdit o~nejpoužívanějším jazyce PHP, který obsahuje mnoho chyb, viz statistika nalezených bezpečnostních děr na serveru \cite{cve_php}, který se tímto tématem zabývá. Jazyk zároveň nevede programátora k~psaní bezpečného kódu, což má za následek nebezpečené aplikace, pokud si autor nedá pozor na správné ošetření vstupů a dalších bezpečnostních aspektů programu.
Většina těchto chyb se vztahuje právě k~dynamickým webovým aplikacím. Bezpečnost tedy závisí nejen na programátorovi, jenž aplikaci vytváří, ale také na tom, že programovací jazyk je bezpečně implementován. To nelze tvrdit o~nejpoužívanějším jazyce PHP, který obsahuje mnoho chyb, viz statistika nalezených bezpečnostních děr na serveru \cite{cve_php}, který se tímto tématem zabývá. Jazyk zároveň nevede programátora k~psaní bezpečného kódu, což má za následek nebezpečené aplikace, pokud si autor nedá pozor na správné ošetření vstupů a dalších bezpečnostních aspektů programu.
Podstatným příkladem chybovosti dynamických webů je systém Wordpress, v~němž jsou podle serveru \cite{cve_wordpress} každý rok nalezeny desítky bezpečnostních chyb, přičemž mnoho dalších přibývá s~instalací nezabezpečených rozšíření. Napří\-klad na začátku roku 2020 byla nalezena bezpečnostní chyba v~rozšíření využívaném na více než dvě stě tisících webových stránkách, která útočníkům umožňovala smazat obsah databáze \citep{thehackernews_wordpress_1}. Na konci roku 2019 umožnila chyba ve dvou nezabezpečených rozšířeních neautorizované přihlášení k~účtu administrátora bez použití hesla \citep{thehackernews_wordpress_2}.
Podstatným příkladem chybovosti dynamických webů je systém Wordpress, v~němž jsou podle serveru \cite{cve_wordpress} každý rok nalezeny desítky bezpečnostních chyb, přičemž mnoho dalších přibývá s~instalací nezabezpečených rozšíření. Napří\-klad na začátku roku 2020 byla nalezena bezpečnostní chyba v~rozšíření využívaném na více než dvě stě tisících webových stránkách, která útočníkům umožňovala smazat obsah databáze \citep{thehackernews_wordpress_1}. Na konci roku 2019 umožnila chyba ve dvou neza\-bezpečených rozšířeních neautorizované přihlášení k~účtu administrátora bez použití hesla \citep{thehackernews_wordpress_2}.
Údržba velkých webových aplikací je často problematická. Kód je nutné udržovat v~návaznosti na aktualizace daného jazyka, databázového systému a dalších aspektů. Těmto aktualizacím se z~bezpečnostních důvodů nelze vyhýbat. Statický web nemusí udržovat funkční propojení s~databázemi a dalšími částmi systému, a je tedy mnohem méně náročný na dlouhodobou údržbu. Při zvolení správného generátoru není nutná ani údržba šablon a celý systém při zachování stejného prostředí nepřestane fungovat. Protože statický generátor nepracuje s~uživatelským vstupem, vyhýbá se bezpečnostním chybám a tím i nutným aktualizacím.
Údržba velkých webových aplikací je často problematická. Kód je nutné udržovat v~návaznosti na aktualizace daného jazyka, databázového systému a dalších aspektů. Těmto aktualizacím se z~bezpečnostních důvodů nelze vyhýbat. Statický web nemusí udržovat funkční propojení s~databázemi a dalšími částmi systému, a je tedy mnohem méně náročný na dlouhodobou údržbu. Při zvolení správného generátoru není nutná ani údržba šablon a celý systém při zachování stejného prostředí nepřestane fungovat. Protože statický generátor nepracuje s~uživatelským vstupem, vyhýbá se bezpečnostním chybám a tím i nutným aktualizacím.
Za obecného zástupce tohoto druhu stránek lze považovat Wikipedii, která podnítila vznik spousty jiných takzvaných \textit{Wiki systémů} a stránek. Jde o~formu stránky, jež obsahuje velké množství informací s~různou provázaností. Nejde o~lineární dokumentaci projektu, nýbrž o~encyklopedii obecných informací.
Za obecného zástupce tohoto druhu stránek lze považovat Wikipedii, která podnítila vznik spousty jiných takzvaných \textit{Wiki systémů} a stránek. Jde o~formu stránky, jež obsahuje velké množství informací s~různou provázaností. Nejde o~lineární dokumentaci projektu, nýbrž o~encyklopedii obecných informací.
Jak již bylo řečeno, tuto formu stránek lze implementovat jakýmkoliv generátorem. Existují ale generátory vytvořené přímo pro účel tohoto paradigmatu. Takových generátorů je ovšem málo, jelikož jedním ze základních znaků wiki je to, že její obsah tvoří komunita uživatelů, což nemusí být vždy vhodné pro systém statického generování obsahu. Jedním takovým programem je ikiwiki\footnote{\url{https://ikiwiki.info/}}, který funguje stejně jako ostatní sta\-tické generátory. Další programy, například MDwiki\footnote{\url{https://dynalon.github.io/mdwiki/}}, zpracovávají Markdown přímo v~prohlížeči a HTML obsah tedy není předgenerován na serveru.
Jak již bylo řečeno, tuto formu stránek lze implementovat jakýmkoliv generátorem. Existují ale generátory vytvořené přímo pro účel tohoto paradigmatu. Takových gene\-rátorů je ovšem málo, jelikož jedním ze základních znaků wiki je to, že její obsah tvoří komunita uživatelů, což nemusí být vždy vhodné pro systém statického generování obsahu. Jedním takovým programem je ikiwiki\footnote{\url{https://ikiwiki.info/}}, který funguje stejně jako ostatní sta\-tické generátory. Další programy, například MDwiki\footnote{\url{https://dynalon.github.io/mdwiki/}}, zpracovávají Markdown přímo v~prohlížeči a HTML obsah tedy není předgenerován na serveru.
Program MDwiki je prezentován jako generátor vytvořený na míru pro wiki stránky, ovšem jeho výstup je velice podobný generátorům z~tabulky \ref{tab:generatory-technicka-dokumentace}.
Program MDwiki je prezentován jako generátor vytvořený na míru pro wiki stránky, ovšem jeho výstup je velice podobný generátorům z~tabulky \ref{tab:generatory-technicka-dokumentace}.
@ -162,7 +162,7 @@ Na závěr děkuji partnerce a rodině za podporu během psaní této práce.
% Abstrakt (doporučený rozsah cca 80-200 slov; nejedná se o zadání práce)
% Abstrakt (doporučený rozsah cca 80-200 slov; nejedná se o zadání práce)
\def\Abstrakt{%
\def\Abstrakt{%
Bakalářská práce pojednává o~problematice statických webových stránek a jejich generátorů. Popisuje nejčastěji používaná webová paradigmata, generátory a značkovací jazyky, které se ke psaní obsahu těchto stránek používají. Součástí práce je i taxonomie požadavků a jejich modelová implementace ve formě celého systému pro generování statických webových stránek, včetně optimalizace a implementace vlastních rozšíření a verzovacího systému pro správu obsahu. V~závěrečné části je modelová implementace vyhodnocena na základě dříve zmíněných požadavků a poznatků z~předchozí části práce.
Bakalářská práce pojednává o~problematice statických webových stránek a jejich gene\-rátorů. Popisuje nejčastěji používaná webová paradigmata, generátory a značkovací jazyky, které se ke psaní obsahu těchto stránek používají. Součástí práce je i taxonomie požadavků a jejich modelová implementace ve formě celého systému pro generování statických webových stránek, včetně optimalizace a implementace vlastních rozšíření a verzovacího systému pro správu obsahu. V~závěrečné části je modelová implementace vyhodnocena na základě dříve zmíněných požadavků a poznatků z~předchozí části práce.
}
}
\def\AbstraktEN{%
\def\AbstraktEN{%
This bachelor's thesis deals with static websites and static web generators. It describes the most used website paradigms, static web generators and typesetting languages, which are used as source files for the content of the website. A~part of the thesis is dedicated to the taxonomy of requirements for a specific website and its actual implementation with optimizations, implementations of custom extensions and a Content Management System. The last part of the thesis evaluates the created implementation according to the given requirements and findings from the first part.
This bachelor's thesis deals with static websites and static web generators. It describes the most used website paradigms, static web generators and typesetting languages, which are used as source files for the content of the website. A~part of the thesis is dedicated to the taxonomy of requirements for a specific website and its actual implementation with optimizations, implementations of custom extensions and a Content Management System. The last part of the thesis evaluates the created implementation according to the given requirements and findings from the first part.