- Přehledy IS
- APS (20)
- BPM - procesní řízení (22)
- Cloud computing (IaaS) (10)
- Cloud computing (SaaS) (33)
- CRM (51)
- DMS/ECM - správa dokumentů (20)
- EAM (17)
- Ekonomické systémy (68)
- ERP (80)
- HRM (27)
- ITSM (6)
- MES (32)
- Řízení výroby (36)
- WMS (29)
- Dodavatelé IT slueb a řeení
- Datová centra (25)
- Dodavatelé CAD/CAM/PLM/BIM... (39)
- Dodavatelé CRM (33)
- Dodavatelé DW-BI (50)
- Dodavatelé ERP (71)
- Informační bezpečnost (50)
- IT řeení pro logistiku (45)
- IT řeení pro stavebnictví (26)
- Řeení pro veřejný a státní sektor (27)
Hlavní partner sekce
Partneři sekce
Tematické sekce
ERP systémy
CRM systémy
Plánování a řízení výroby
AI a Business Intelligence
DMS/ECM - Správa dokumentů
HRM/HCM - Řízení lidských zdrojů
EAM/CMMS - Správa majetku a údrby
Účetní a ekonomické systémy
ITSM (ITIL) - Řízení IT
Cloud a virtualizace IT
IT Security
Logistika, řízení skladů, WMS
IT právo
GIS - geografické informační systémy
Projektové řízení
Trendy ICT
E-commerce B2B/B2C
CAD/CAM/CAE/PLM/3D tiskBranové sekce
![]() | |
| Přihlaste se k odběru newsletteru SystemNEWS, který kadý týden přináí výběr článků z oblasti podnikové informatiky | |
![]() | |
Partneři webu
IT Professional - IT Security I , IT Security
Vývoj webových aplikací
Michal Medvecký
V dnení době je obvyklé nahrazovat běné aplikace, jejich vývoj je relativně nákladný, odlehčenou variantou aplikacemi s webovým rozhraním. Platforma pro psaní aplikací je to rozhodně lákavá. Jsou oblasti, ve kterých přinesla mnoho úspor a přispěla k významnému zlepení efektivity práce. Jako příklad lze uvést četné redakční systémy určené pro správu a úpravu obsahu právě webových stránek nebo systémy pro monitorování dostupnosti.
Na druhou stranu je tato platforma často brána jako velék, který nemá problémy plnohodnotných aplikací, co rozhodně není a v dohledné době určitě nebude pravdou. Jako patné příklady slouí například data-sharing portály nebo fakturační systémy kompletně ovládané přes web.
Bezpečnostní rizika při tvorbě webových aplikacích lze rozdělit do třech hlavních kategorií:
Nejčastějím či spíe v médiích nejvíce viditelným jazykem pro psaní webových aplikací je jazyk PHP. Vznikl jako jednoduchý nástroj pro přidání dynamiky do jinak statických webových stránek a neduhy ze své počáteční jednoduchosti si nese dodnes. Ostatně zkratka PHP původně znamenala Pretty Home Pages.
Snadná syntaxe a dostupnost tohoto jazyka mají za následek, e PHP programátorem se můe stát kdokoliv takřka přes noc. Má to i své světlé stránky, najmout PHP programátora dnes není nijak velká investice a firmy mají jistotu, e vdy mohou snadno sehnat náhradu. Najmout dobrého PHP programátora ale u tak laciné není a velmi rychle se ukáe, e kdy je potřeba naprogramovat komplexní systém, je nutné pouít sofistikované prostředky a kvalifikované programátory, jejich náklady je třeba zahrnout do rozpočtu.
Mnohokrát by při tom stačilo poskytnout programátorskému týmu jako celku patřičné kolení o rizicích spojených s programováním webových aplikací a naučit je základním návykům bezpečných programovacích postupů. patných programovacích postupů je sice neomezeně mnoho, v praxi se ale setkáváme jen se spoustou variací na některé základní.
Tyto problémy se samozřejmě netýkají jen programovacího jazyka PHP. Větina zde popsaných problémů je spíe velmi obecného charakteru a lze je vidět i při vývoji webových aplikací v programovacích jazycích, jako je Java, Python, C# či dnes populární Ruby.
Nejčastějím programátorským opomenutím je patná, či ádná kontrola hodnot proměnných nebo jejich chybějící inicializace. Tento neduh umoňuje útočníkovi získat přístup k informacím, které nebyly určeny ke zveřejnění. Takto lze získat přístup k systémovým souborům, ke zdrojovým kódům aplikace, nebo dokonce podstrčit potenciálně kodlivý kód.
Typickou ukázkou takovéto chyby je přístup k souborům, mějme například následující hypotetický fragment publikačního systému, soubor zobraz.php:
Odhlédneme-li od faktu, e tento přístup k programování webových aplikací by v dnením světě neměl mít místo, lze si představit korektní verzi, která bude kontrolovat, zda se snaíme zobrazit soubor z povoleného umístění a zda jméno souboru neobsahuje nějaké potenciálně nebezpečné znaky. Zde se jedná o typickou ukázku technik bezpečného programování input validation a input sanitizing.
Pokud by skutečně bylo potřeba zobrazovat obsahy fyzických souborů, je lepí mít někde uloené mapování identifikátorů na názvy souborů a od uivatele číst pouze daný identifikátor. Zcela tím zamezíme styku proměnné, kterou má uivatel monost ovlivnit, přímo se souborovým systémem.
Sama o sobě nepředstavuje tato technika v dnení době a tak velké riziko, nebo programovací frameworky poskytují bezpečná rozhraní přístupu k datovým úloitím a ji k databázím, nebo souborům na disku. Programátoři ale často ádné takové rozhraní nepouívají. Pro přístup k databázím by dnes ji mělo být samozřejmostí pouít nějaké rozhraní typu DBI, které obalí konkrétní SQL server sadou funkcí zajiující bezpečné předání potenciálně nebezpečného obsahu.
Pokud by vechny systémy, se kterými se na webu můeme setkat, vyuívaly rozhraní DBI, mohly by útoky typu SQL injection být minulostí. Dnes ji klasický příklad můe vypadat jako úprava nám známého zobraz.php:
Celkově lze říci, e větinu programátorských chyb lze eliminovat buď dodrováním zásad bezpečného programování, nebo pouitím ji existujících komponent. Právě ona nechu pouít ji hotové komponenty má často za následek uspěchanou a nekvalitní implementaci komponent vlastních, při snaze dodat výsledný produkt v co nejkratím termínu.
Pokud není dobře navrena autentizace uivatelů, znamená to, e je moné ji nějak přímo či nepřímo obejít. Zaprvé je dobré vyadovat zabezpečenou transportní vrstvu, tedy pouít protokol HTTPS a pořídit pro server důvěryhodný certifikát. Zadruhé je potřeba myslet na zachování důvěrnosti přihlaovacích údajů. V dnení době předevím uivatelského jména a hesla.
Dnes se uivatelské jméno a heslo pouívají jako přihlaovací údaje jen ze setrvačnosti. K dispozici jsou ji mnohem bezpečnějí metody autentizace na základě kryptografie pomocí privátních a veřejných klíčů.
U autentizace heslem je potřeba brát v potaz i způsob, jakým budou data po uivateli vyadována. Předevím je potřeba se zaměřit na zamezení monosti podvrhnutí přihlaovacího formuláře pomocí technik typu cross-site scripting či man in-the-middle. Metoda cross-site scripting je o to nebezpečnějí, e nevyaduje téměř ádnou interakci od oběti útoku. Útočník pomocí zjitěného nedostatku v systému nahradí přihlaovací dialog svým vlastním, který údaje nic netuícího uivatele odele na jeho vlastní server a poté zajistí, aby systém uivatele přihlásil a ten neměl monost nijak poznat, e jeho heslo někdo zachytil.
Způsob zpracování sezení je zase důleitý z hlediska zachování důvěrnosti celé práce se systémem. Při některých nedostatcích návrhu je moné provést takzvaný útok typu session-steal, kdy útočník získá údaje, které mu umoní vystupovat v systému jako jiný, ji přihláený uivatel. Často k tomu stačí odchytit hodnotu identifikátoru sezení (session id) a tu poté pouít na jiném počítači. Tomuto typu útoku lze efektivně předcházet relativně snadno pokud vynecháme třetí kategorii problémů, na kterou se podíváme v závěru , stačí zajistit bezpečné komunikační kanály a uvědomit si, e celek je tak bezpečný, jak je bezpečná jeho nejslabí část. I proto je dobré nemít přihlaovací formulář na stránce, její obsah můe být modifikován někým jiným ne administrátorem systému.
Některé chyby ve webových prohlíečích usnadňují ji známé útoky. Předevím se jedná o monosti podvrhnutí legitimní stránky stránkou útočníka, nebo jetě hůře, usnadnění útoku typu session-steal. Například při nedostatečném vynucování oprávnění přístupu ke cookies je moné vyádat si cookie z cizí domény či cizí stránky a poslat jej na počítač ovládaný útočníkem. Často prosté oddělení na domény a stránky nestačí, nebo je nutné počítat i s útočníkem, který má práva zápisu do nějaké nevýznamné části webu, jako je diskusní fórum či publikace článků. Pokud zkombinujeme tuto monost se současným způsobem správy cookies tedy podle domén a stránek, a ne podle sezení v rámci prohlíeče , je snadné ukrást cookie obsahující session id přihláeného uivatele.
Tyto problémy je potřeba řeit důslednějí kontrolou na straně serveru, a nespoléhat se tedy na oddělení práv na straně webového prohlíeče.
A v případě, e si nejsme bezpečností provozované aplikace jisti, je moné nakonfigurovat HTTP server a interpret skriptovacího jazyka či programové prostředí systému tak, aby bylo některým útokům zabráněno. Lze omezovat monosti otvírání souborů jen na některé části souborového systému, práva, co smí webová aplikace spoutět, a mnoho dalích velmi jemných nastavení.
Co dělat, pokud ji máte v provozu systém, který se stal obětí úspěného útoku hackera? Nejprve je dobré nechat provést analýzu napadeného systému a pokusit se přesně zjistit, kterou chybu a jakým způsobem útočník zneuil. Také je vhodné nechat provést bezpečnostní analýzu zdrojových kódů a návrhu aplikace nezávislým auditorem, který můe poradit konkrétní kroky k efektivní nápravě.

Bezpečnostní rizika při tvorbě webových aplikacích lze rozdělit do třech hlavních kategorií:
- patné programovací postupy,
- chybná analýza,
- nedostatky webových prohlíečů.
patné programovací postupy
V posledních deseti a patnácti letech se hodně rozířily jednoduché skriptovací jazyky, které byly původně určeny k automatizaci relativně malých problémů. Časem je ale programátoři začali pouívat na vechno, co si lze představit tedy i na programování webových aplikací. Tyto jazyky pochopitelně postrádaly monosti, jak efektivně psát bezpečné aplikace, a často dodnes vidíme na aplikačních frameworcích psaných pro tyto jazyky, e bezpečnost je do nich roubována jen velmi těko.Nejčastějím či spíe v médiích nejvíce viditelným jazykem pro psaní webových aplikací je jazyk PHP. Vznikl jako jednoduchý nástroj pro přidání dynamiky do jinak statických webových stránek a neduhy ze své počáteční jednoduchosti si nese dodnes. Ostatně zkratka PHP původně znamenala Pretty Home Pages.
Snadná syntaxe a dostupnost tohoto jazyka mají za následek, e PHP programátorem se můe stát kdokoliv takřka přes noc. Má to i své světlé stránky, najmout PHP programátora dnes není nijak velká investice a firmy mají jistotu, e vdy mohou snadno sehnat náhradu. Najmout dobrého PHP programátora ale u tak laciné není a velmi rychle se ukáe, e kdy je potřeba naprogramovat komplexní systém, je nutné pouít sofistikované prostředky a kvalifikované programátory, jejich náklady je třeba zahrnout do rozpočtu.
Mnohokrát by při tom stačilo poskytnout programátorskému týmu jako celku patřičné kolení o rizicích spojených s programováním webových aplikací a naučit je základním návykům bezpečných programovacích postupů. patných programovacích postupů je sice neomezeně mnoho, v praxi se ale setkáváme jen se spoustou variací na některé základní.
Tyto problémy se samozřejmě netýkají jen programovacího jazyka PHP. Větina zde popsaných problémů je spíe velmi obecného charakteru a lze je vidět i při vývoji webových aplikací v programovacích jazycích, jako je Java, Python, C# či dnes populární Ruby.
Nejčastějím programátorským opomenutím je patná, či ádná kontrola hodnot proměnných nebo jejich chybějící inicializace. Tento neduh umoňuje útočníkovi získat přístup k informacím, které nebyly určeny ke zveřejnění. Takto lze získat přístup k systémovým souborům, ke zdrojovým kódům aplikace, nebo dokonce podstrčit potenciálně kodlivý kód.
Typickou ukázkou takovéto chyby je přístup k souborům, mějme například následující hypotetický fragment publikačního systému, soubor zobraz.php:
include(top.html); include(data/.$soubor); include(bottom.html);Tento soubor je vyuit k zobrazení souboru v adresáři data, mohou v něm být například články, zobrazované pod URL:
http://domena.cz/zobraz.php?soubor=bezpecne-programovani.htmlZneuití je na místě, pomocí techniky zvané path-traversal je moné zobrazit si obsah libovolného souboru na filesystemu, ke kterému má webserver přístup, stačí jako proměnnou soubor podstrčit například ../database.cfg a máme k dispozici obsah souboru, ve kterém bude pravděpodobně konfigurace přístupu do databáze včetně uivatelského jména a hesla.
Odhlédneme-li od faktu, e tento přístup k programování webových aplikací by v dnením světě neměl mít místo, lze si představit korektní verzi, která bude kontrolovat, zda se snaíme zobrazit soubor z povoleného umístění a zda jméno souboru neobsahuje nějaké potenciálně nebezpečné znaky. Zde se jedná o typickou ukázku technik bezpečného programování input validation a input sanitizing.
Pokud by skutečně bylo potřeba zobrazovat obsahy fyzických souborů, je lepí mít někde uloené mapování identifikátorů na názvy souborů a od uivatele číst pouze daný identifikátor. Zcela tím zamezíme styku proměnné, kterou má uivatel monost ovlivnit, přímo se souborovým systémem.
Sama o sobě nepředstavuje tato technika v dnení době a tak velké riziko, nebo programovací frameworky poskytují bezpečná rozhraní přístupu k datovým úloitím a ji k databázím, nebo souborům na disku. Programátoři ale často ádné takové rozhraní nepouívají. Pro přístup k databázím by dnes ji mělo být samozřejmostí pouít nějaké rozhraní typu DBI, které obalí konkrétní SQL server sadou funkcí zajiující bezpečné předání potenciálně nebezpečného obsahu.
Pokud by vechny systémy, se kterými se na webu můeme setkat, vyuívaly rozhraní DBI, mohly by útoky typu SQL injection být minulostí. Dnes ji klasický příklad můe vypadat jako úprava nám známého zobraz.php:
echo(mysql_fetch(mysql_query(SELECT data FROM clanky WHERE id=$soubor))[0]);Zde se nabízí SQL injection v celé své kráse. Pokud za proměnnou soubor dosadíme kus SQL příkazu, můeme provádět zajímavé operace přímo v SQL serveru. Například 1; DELETE FROM clanky, co je příkaz, který vyprázdní tabulku článků. Při tomto nezabezpečeném přístupu stačilo ukončit příkaz znakem středníku a napsat za něj libovolný dalí. Pochopitelně v reálném nasazení je to troku sloitějí, ale opravdu jen o málo.
Celkově lze říci, e větinu programátorských chyb lze eliminovat buď dodrováním zásad bezpečného programování, nebo pouitím ji existujících komponent. Právě ona nechu pouít ji hotové komponenty má často za následek uspěchanou a nekvalitní implementaci komponent vlastních, při snaze dodat výsledný produkt v co nejkratím termínu.
Chybná analýza
Při analýze zadání projektu a přípravy implementačních prací je moné předejít celé kále moných bezpečnostních rizik, nebo naopak otevřít zadní vrátka případným útočníkům. Ji ve fázi analýzy je potřeba rozhodnout, jakým způsobem se budou autentizovat privilegovaní uivatelé a jak budou ukládána a zpracovávána data sezení. Tyto dvě oblasti jsou obvyklým zdrojem nejhorích chyb a největích bezpečnostních rizik.Pokud není dobře navrena autentizace uivatelů, znamená to, e je moné ji nějak přímo či nepřímo obejít. Zaprvé je dobré vyadovat zabezpečenou transportní vrstvu, tedy pouít protokol HTTPS a pořídit pro server důvěryhodný certifikát. Zadruhé je potřeba myslet na zachování důvěrnosti přihlaovacích údajů. V dnení době předevím uivatelského jména a hesla.
Dnes se uivatelské jméno a heslo pouívají jako přihlaovací údaje jen ze setrvačnosti. K dispozici jsou ji mnohem bezpečnějí metody autentizace na základě kryptografie pomocí privátních a veřejných klíčů.
U autentizace heslem je potřeba brát v potaz i způsob, jakým budou data po uivateli vyadována. Předevím je potřeba se zaměřit na zamezení monosti podvrhnutí přihlaovacího formuláře pomocí technik typu cross-site scripting či man in-the-middle. Metoda cross-site scripting je o to nebezpečnějí, e nevyaduje téměř ádnou interakci od oběti útoku. Útočník pomocí zjitěného nedostatku v systému nahradí přihlaovací dialog svým vlastním, který údaje nic netuícího uivatele odele na jeho vlastní server a poté zajistí, aby systém uivatele přihlásil a ten neměl monost nijak poznat, e jeho heslo někdo zachytil.
Způsob zpracování sezení je zase důleitý z hlediska zachování důvěrnosti celé práce se systémem. Při některých nedostatcích návrhu je moné provést takzvaný útok typu session-steal, kdy útočník získá údaje, které mu umoní vystupovat v systému jako jiný, ji přihláený uivatel. Často k tomu stačí odchytit hodnotu identifikátoru sezení (session id) a tu poté pouít na jiném počítači. Tomuto typu útoku lze efektivně předcházet relativně snadno pokud vynecháme třetí kategorii problémů, na kterou se podíváme v závěru , stačí zajistit bezpečné komunikační kanály a uvědomit si, e celek je tak bezpečný, jak je bezpečná jeho nejslabí část. I proto je dobré nemít přihlaovací formulář na stránce, její obsah můe být modifikován někým jiným ne administrátorem systému.
Nedostatky webových prohlíečů
I kdy vae webová aplikace bude dobře navrená a implementovat ji budou programátoři s dobrými znalostmi bezpečných programovacích technik, jsou zde rizika, která nelze přímo ovlivnit. Webový prohlíeč je multifunkční aplikace, která dnes ji zdaleka neslouí jen k prohlíení statických webových stránek, pouívá se k celé řadě činností, od provádění bankovních transakcí po sledování multimédií. Mnoho nových vlastností s sebou přineslo mnoho nových moností zneuití. Častými chybami prohlíečů je dnes nedostatečné oddělení oprávnění jednotlivých domén a/nebo stránek. A u se jedná o práva pro přístup k uloeným cookies, nebo přímo k obsahům stránek načtených v jiných oknech či zálokách prohlíeče.Některé chyby ve webových prohlíečích usnadňují ji známé útoky. Předevím se jedná o monosti podvrhnutí legitimní stránky stránkou útočníka, nebo jetě hůře, usnadnění útoku typu session-steal. Například při nedostatečném vynucování oprávnění přístupu ke cookies je moné vyádat si cookie z cizí domény či cizí stránky a poslat jej na počítač ovládaný útočníkem. Často prosté oddělení na domény a stránky nestačí, nebo je nutné počítat i s útočníkem, který má práva zápisu do nějaké nevýznamné části webu, jako je diskusní fórum či publikace článků. Pokud zkombinujeme tuto monost se současným způsobem správy cookies tedy podle domén a stránek, a ne podle sezení v rámci prohlíeče , je snadné ukrást cookie obsahující session id přihláeného uivatele.
Tyto problémy je potřeba řeit důslednějí kontrolou na straně serveru, a nespoléhat se tedy na oddělení práv na straně webového prohlíeče.
Prevence a obrana
Pokud chceme v krátkosti shrnout problémy, se kterými se při současném vývoji webových aplikací setkáváme, dojdeme k závěru, e se jedná o stále se opakující variace na jedno téma: neinformovanost. Programátoři nepouívají bezpečné programovací techniky a univerzální rozhraní, protoe o nich nevědí nebo neznají jejich přínos. Analytici jsou schopni perfektně vytvořit obraz poadavků zákazníka, ale ji selhávají ve volbě správných prostředků k dosaení cíle. V obou případech by pravděpodobně stačila krátká série kolení a výsledek by byl téměř okamitý.A v případě, e si nejsme bezpečností provozované aplikace jisti, je moné nakonfigurovat HTTP server a interpret skriptovacího jazyka či programové prostředí systému tak, aby bylo některým útokům zabráněno. Lze omezovat monosti otvírání souborů jen na některé části souborového systému, práva, co smí webová aplikace spoutět, a mnoho dalích velmi jemných nastavení.
Co dělat, pokud ji máte v provozu systém, který se stal obětí úspěného útoku hackera? Nejprve je dobré nechat provést analýzu napadeného systému a pokusit se přesně zjistit, kterou chybu a jakým způsobem útočník zneuil. Také je vhodné nechat provést bezpečnostní analýzu zdrojových kódů a návrhu aplikace nezávislým auditorem, který můe poradit konkrétní kroky k efektivní nápravě.
Chcete získat časopis IT Systems s tímto a mnoha dalími články z oblasti informačních systémů a řízení podnikové informatiky? Objednejte si předplatné nebo konkrétní vydání časopisu IT Systems z naeho archivu.





















