Úpravy podle poznámek od táty

master
Emil Miler 5 years ago
parent fd0a821c35
commit e687467452

@ -1,18 +1,18 @@
\chapter{Staticky generovaný web}
\chapter{Staticky generované webové stránky}
Princip statické webové stránky sahá až ke vzniku WWW, kdy existovaly pouze stránky statické, tedy stejné pro každého uživatele. Jejich obsah může být průběžně aktualizován, ovšem negenerují se zvlášť pro každého uživatele na základě různých proměnných. U~statických webů tedy dochází k~vytvoření čistého HTML ve chvíli, kdy je změněn zdrojový obsah, nebo kdy autor ručně spustí generátor. \citep{pcmag_static}
Princip statické webové stránky sahá až ke vzniku WWW, kdy existovaly pouze stránky statické, tedy stránky nevytvářené dynamicky na základě různých proměnných a na uživatelském vstupu. U~statických webových stránek dochází k~vytvoření čistého HTML ve chvíli, kdy je změněn zdrojový obsah, nebo kdy autor ručně spustí generátor. \citep{pcmag_static}
Dynamické stránky jsou generovány speciálně pro každého uživatele na základě jeho nastavení, různých vstupů, proměnných a dalších vlastností. Ke generování dochází ve chvíli, kdy si uživatel stránku vyžádá, nikoliv předem, jako je tomu u~staticky generovaných stránek. \citep{pcmag_dynamic}
\section{Výhody statických webových stránek}\label{kap:vyhody-statickych-webovych-stranek}
Pro sdílení statického obsahu mezi různé uživatele stačí velmi jednoduchý HTTP server bez jakýchkoliv dalších modulů typu \textit{PHP}, \textit{Python} a dalších systémů, které by obsah dynamicky generovaly například z~dat vytažených z~databáze nebo z~uživatelského vstupu. Na straně serveru tedy nedochází ke zpracování obsahu těsně před jeho odesláním uživateli, čímž se v~komunikaci mezi klientem a serverem drasticky snižuje \uv{Time To First Byte}\footnote{Time To First Byte --- čas mezi odesláním požadavku a přijmutím prvního bajtu dat.}, a tím dochází ke snížení celkové latence. \citep{mozttfb}
Pro sdílení statického obsahu mezi různé uživatele stačí velmi jednoduchý HTTP server bez jakýchkoliv dalších modulů typu \textit{PHP}, \textit{Python} a dalších systémů, které by obsah dynamicky generovaly například z~dat vytažených z~databáze nebo z~uživatelského vstupu. Na straně serveru tedy nedochází ke zpracování obsahu těsně před jeho odesláním uživateli, čímž se v~komunikaci mezi klientem a serverem výrazně snižuje \uv{Time To First Byte}\footnote{Time To First Byte -- Čas mezi odesláním požadavku a přijmutím prvního bajtu dat.}, a tím dochází ke snížení celkové latence. \citep{mozttfb}
Snížení samotné latence může pozitivně přispět ke spokojenosti uživatelů, což dokazuje nespočet výzkumů na toto téma, například analýza z~webového portálu Financial Times, kde se uvádí, že rychlost webové stránky negativně ovlivňuje hloubku jejího užívání, ať už je odezva sebemenší. Jak je zde rovněž uvedeno, data ukazují, že z~pohledu uživatelské spokojenosti a finančního dopadu existují jasné a důležité výhody při zrychlení webové stránky. Z~tohoto výzkumu se autoři rozhodli v~měsících po vydání analýzy investovat více času do úprav všech aspektů jejich nové stránky FT.com s~cílem jejího zrychlení. \citep{financialtimes}
Snížení latence může pozitivně přispět ke spokojenosti uživatelů, což dokazuje nespočet výzkumů na toto téma, například analýza z~webového portálu Financial Times, kde se uvádí, že rychlost webové stránky negativně ovlivňuje hloubku jejího užívání, ať už je odezva sebemenší. Jak je zde rovněž uvedeno, data ukazují, že z~pohledu uživatelské spokojenosti a finančního dopadu existují jasné a důležité výhody při zrychlení webové stránky. Z~tohoto výzkumu se autoři rozhodli v~měsících po vydání analýzy investovat více času do úprav všech aspektů jejich nové stránky FT.com s~cílem jejího zrychlení. \citep{financialtimes}
Eliminováním dynamického obsahu se také předchází nevyžádaným vstupům od uživatele, které mohou být i cílené na prolomení bezpečnostních nedostatků webové aplikace a v~některých případech mohou vést k~úniku citlivých dat, převzetí kontroly útočníka nad webovou aplikací nebo celým serverem, podstrčení falešných dat uživateli a mnoha dalším běžným útokům. Statický web eliminuje tento problém, jelikož nemá žádný uživatelský vstup.
Sledování a analýze nejčastějších chyb webových aplikací a serverů se věnuje organizace OWASP\footnote{The Open Web Application Security Project -- \url{https://owasp.org/}.}, která vydává aktualizované seznamy a statistiky. Podle OWASP byly v~roce 2017 nejčastější tyto chyby a bezpečnostní nedostatky:
Sledování a analýze nejčastějších chyb webových aplikací a serverů se věnuje organizace OWASP\footnote{The Open Web Application Security Project (\url{https://owasp.org/}).}, která vydává aktualizované seznamy a statistiky. Podle \cite{owasp2017} se v~roce 2017 objevovaly nejčastěji tyto chyby a bezpečnostní nedostatky:
\begin{enumerate}
\item{Injekce}
@ -27,15 +27,13 @@ Sledování a analýze nejčastějších chyb webových aplikací a serverů se
\item{Nedostatečné logování a monitorování}
\end{enumerate}
\citep{owasp2017}
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, který 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ý nejen že obsahuje mnoho chyb, viz seznam nalezených bezpečnostních děr \citep{cve_php}, ale 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, ve kterém jsou každý rok nalezeny desítky bezpečnostních chyb \citep{cve_wordpress}, přičemž mnoho dalších přibývá s~instalací rozšíření, která postrádají bezpečnostní prvky. Například na začátku roku 2020 byla nalezena bezpečnostní chyba v~rozšíření, které bylo využíváno na více než dvě stě tisících webových stránkách, a potencionálním ú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}.
Ú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 různými frameworky, 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.
Jako každý jiný systém, i statické generátory mají své nevýhody. Hlavním z~problémů je to, že správa statického generátoru a tvorba obsahu je náročnější než klasické webové rozhraní s~administračním panelem, různými uživateli a jednoduchou správou pro běžné, méně technicky zaměřené uživatele. Pro přidání nebo úpravu obsahu je nutné pracovat s~lokálními soubory ve stromové struktuře a při generování je často potřebný zásah do shellu\footnote{Program pro interpretování příkazů v~prostředí příkazové řádky.}. Tvorba systému pro automatizované generování je také náročnější než instalace některého z~běžných CMS\footnote{Content Management System}. \citep{softpedia_generators}
Jako každý jiný systém, i statické generátory mají své nevýhody. Hlavním z~problémů je to, že správa statického generátoru a tvorba obsahu je náročnější než klasické webové rozhraní s~administračním panelem, různými uživateli a jednoduchou správou pro běžné, méně technicky zaměřené uživatele. Pro přidání nebo úpravu obsahu je nutné pracovat s~lokálními soubory ve stromové struktuře a při generování je často potřebný zásah do shellu\footnote{Program pro interpretování příkazů v~prostředí příkazové řádky.}. Tvorba systému pro automatizované generování je také náročnější než instalace některého z~běžných CMS\footnote{Content Management System -- Systém pro správu a verzování obsahu.}. \citep{softpedia_generators}
\section{Princip generátorů}\label{kap:princip-generatoru}

Binary file not shown.

@ -151,15 +151,21 @@
% Nepovinné poděkování (vedoucímu práce, konzultantovi, tomu, kdo
% zapůjčil software, literaturu apod.)
\def\Podekovani{%
Děkuji především svému vedoucímu, doktoru Procházkovi, který mě vždy nasměroval správnou cestou a měl se mnou trpělivost. Velmi děkuji Lukáši Hozdovi za jeho technickou a odbornou asistenci se statickými generátory a se sázením samotné práce, a dále také Janu Vaisovi za jeho cenné rady k~sázení a k~obecnému psaní závěrečnách prací. Také děkuji Vítu Matějíčkovi, Albertu Pospíšilovi a Dawidu Kubiśovi za jejich pomoc s~překlady, korekturou, nebo jinými částmi práce. Dále pak děkuji partnerce, členům studentského spolku \textit{microlab} a všem ostatním za jejich podporu a pomoc při tvorbě této práce.
Děkuji především svému vedoucímu PhDr. Josefu Procházkovi, Ph.D. za všestrannou podporu během všech fází zpracování této práce, především pak za jeho vstřícnost, trpělivost a pochopení.
Mou povinností je také poděkovat Lukáši Hozdovi za jeho technickou a odbornou asistenci se statickými generátory a se sázením samotné práce, a dále také Janu Vaisovi za jeho cenné rady k~sázení a k~obecnému psaní závěrečnách prací.
Dále musím poděkovat Vítu Matějíčkovi, Albertu Pospíšilovi a Dawidu Kubiśovi za pomoc s~překlady, korekturou a za obecné rady k~obsahu. Také děkuji Ing. Emilu K. Mironovovi, Ph.D. za pomoc s~formální úpravou.
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)
\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 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 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.
}
\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.
}
% 3 až 5 klíčových slov (doporučeno), každé uzavřeno ve složených závorkách

@ -2,13 +2,13 @@
\pagestyle{plain}
\addcontentsline{toc}{chapter}{Úvod}
Od statických stránek, které se používaly při vzniku WWW\footnote{World Wide Web}, se trend posunul ke složitým webovým aplikacím a frameworkům, jako jsou například Wordpress, Joomla, nebo Drupal. Dnes se opět trend obrací směrem ke statickým webovým stránkám právě ve formě stránek staticky generovaných, které jsou mnohem lepší z~hlediska rychlosti a bezpečnosti.
Od statických stránek, které se používaly při vzniku WWW\footnote{World Wide Web -- Celosvětová síť pro prohlížení, ukládání a sdílení dokumentů}, se trend posunul ke složitým webovým aplikacím a frameworkům, jako jsou například Wordpress, Joomla, nebo Drupal. Dnes se opět trend obrací směrem ke tvorbě statyckých webových stránek, které jsou mnohem lepší z~hlediska rychlosti a bezpečnosti.
Práce se zabývá problematikou generátorů statických webových stránek. Za statické webové stránky se pouvažují stránky, jejichž obsah je předem vygenerován do čistého HTML\footnote{Hypertext Markup Language -- Sázecí jazyk používaný k~popisu webových stránek} pomocí daného generátoru, tedy programu, který z~obsahu napsaném v~libovolném značkovacím jazyce vygeneruje validní webovou stránku.
Práce se zabývá problematikou generátorů statických webových stránek. Za statické webové stránky se pouvažují stránky, jejichž obsah je předem vygenerován do HTML\footnote{Hypertext Markup Language -- Sázecí jazyk používaný k~popisu obsahu a struktury webové stránky} pomocí daného generátoru, tedy programu, který z~obsahu napsaném v~libovolném značkovacím jazyce vygeneruje validní webovou stránku.
\section{Cíle práce}
Hlavním cílem práce je dát čtenáři základní přehled o problematice statických webových stránek, jejich generátorů, značkovacích jazyků a tyto koncepty vysvětlit prakticky na modelové implementaci. Tento hlavní cíl je dále rozpracován cíli dílčími.
Hlavním cílem práce je vysvětlit čtenáři fungování a sestavení automatizovaného systému pro generování statických webových stránek. Čtenář porozumí problematice statických webových stránek, jejich generátorů, značkovacích jazyků a implementaci těchto konceptů prakticky v~modelové implementaci. Tento hlavní cíl je dále rozpracován cíli dílčími.
\begin{itemize}
\item Seznámit čtenáře se systémy pro generování statických webů.