Letos, stejně jako v několika předchozích letech, jsem měl jedinečnou možnost spolu s dalšími porotci prozkoumat stav více než stovky českých webů, o kterých si jejich tvůrci myslí, že patří k tomu nejlepšímu, co v česku máme - někdy zcela oprávněně, někdy ne.
Měli byste vědět, že jsem velký fanda moderních webových a serverových technologií. Proto jásám, když se mi pod ruce dostane web, na kterém je vidět, že si jeho tvůrce dal opravdu záležet a třeba i trochu zariskoval s použitím nějaké "bleeding edge" technologie. Takové weby posouvají celé odvětví dál a čekal bych, že právě ve WebTop100 jich takových najdu spousty.
Bohužel letos tomu tak úplně nebylo.
Před 3 lety jsme za příklad "bleeding edge" považovali třeba moderní protokol HTTP/2, který může poměrně razantně zlepšit načítání zdrojů. Doba se zrychluje a weby by se měly zrychlovat s ní,přesto v letošním portfoliu webů HTTP/2 používala pouze lehce větší polovina. Protože to evidentně není samozřejmost, tak jsme je za to ještě letos i pochválili, nicméně tu pochvalu už pomalu přestávám myslet upřímně.
Co jsou tedy ty "letošní" technologie, nad kterými mohu zajásat? Svět se například pokouší zbavit starších protokolů TLS 1.0 a TLS 1.1. Máme zde nástupce TLS 1.3, který je jednak rychlejší a druhak nedává příliš volnosti vyjednat si komunikaci na zastaralých šifrách. Podporou TLS 1.3 mě potěšilo 7 statečných webů. Potěší mě ale i například využití obrázků ve formátu WebP nebo komprese Brotli, zvládnutá AMP verze webu, chytré využítí PWA, nebo prostě široké spektrum bezpečnostních HTTP hlaviček. Bohužel se stále jedná spíše o světlé výjimky. Mnoho vývojářů nyní namítne, že velká část z toho není jejich starost, že to mají přece řešit kluci od serverů. Já však tvrdím, že pro úspěch projektu by měli všichni spolupracovat a doplňovat se.
Tip: zkuste si pustit na svém webu audit ve vývojářské konzoli prohlížeče Chrome.
A jaké byly letos naopak nejčastější prohřešky?
Tradičně mělo mnoho webů nedostatky v načítání zdrojů - chybějící cachovací hlavičky, nekomprimování textových zdrojů (JS, CSS, ale i třeba SVG), nebo jednoduše ohromné neoptimalizované obrázky. Můžeme vést polemiku, jak závažný problém to je. Pro mě je to však především indikátor toho, že si nikdo nedal ani pár minut práce a web před přihláškou alespoň zběžně zkontroloval v nástrojích typu GTmetrix nebo Yellow Lab.
Jako pozitivní trend naopak vidím to, že se oproti předchozím ročníkům upouští od masivního využívání webfontů, kdy jsme na mnoha webech mohli najít několik desítek různých řezů písem, což mělo poměrně zásadní vliv na rychlost načítání.
Mnohem zásadnější však byly samozřejmě bezpečnostní problémy. Ty lze letos rozdělit zhruba do 3 hlavních oblastí:
- špatně ošetřené uživatelské vstupy,
- únik citlivých informací skrze různé zapomenuté soubory nebo chybové hlášky,
- dlouho neaktualizované redakční systémy a další komponenty.
Špatně ošetřené uživatelské vstupy - většinou u formulářů - jsme letos nalezli na 12 webech. Tento problém může vést například k úspěšnému provedení útoku typu XSS, kdy útočník do webu vloží vlastní javascript a tím získá kontrolu nad vším, co návštěvník na webu zrovna dělá. Pokud si myslíte, že tento typ problému nalezneme především na webech s menším rozpočtem, tak vězte, že postihuje i weby velkých a známých finančních institucí. A u některých už několik let v řadě…
Velmi nebezpečná situace nastává v situaci, kdy daný web neposílá Session Cookie s příznakem HTTP Only a je tak možné pomocí JavaScriptu ukradnout uživatelovu relaci (problém jsme odhalili na 6 webech)
To je i důvod, proč tak dbáme na používání co nejvíce bezpečnostních HTTP hlaviček, které představují další vrstvu ochrany a mohou zmírnit dopady různých bezpečnostních problémů.
Tip: jaké bezpečnostní hlavičky váš web (ne)používá zjistíte testem na https://securityheaders.com/
Zde bych rád podotknul, že testování webu v rámci WebTop100 nelze srovnávat se zevrubným bezpečnostním auditem. Průběh si můžete představit třeba tak, že si porotce udělá šálek kafe, sedne ke stroji, otevře si daný web, prohlédne si ho, udělá pár testů a šťourne do míst, kde ze zkušenosti ví, že mohou být bolístky. Pokud se mu něco nezdá, tak problém podrobněji prozkoumá. Většinou je zhruba za hodinku hotovo a celý proces se může opakovat na dalším z webů. Oproti tomu řádný audit zabere klidně i několik desítek hodin a testující má často přístupy mnohem hlouběji do systému.
Vraťme se ale zpět k letošnímu hodnocení. Dalším častým problémem jsou nejrůznější zapomenuté soubory, které na produkci nemají co dělat. Může to být například výpis funkce phpinfo(), zapomenuté nástroje na práci s databází, logy, zálohy, nebo třeba celý git repozitář - zlatý důl informací pro případného útočníka. Stejně zajímavé jsou také chybové hlášky. Správně nastavený server by při chybě neměl zobrazit žádné citlivé informace. V praxi to tak však často není a jde "jen" o to najít způsob, jak aplikaci donutit udělat chybu. Chybová stránka by zároveň pro návštěvníka neměla znamenat "konečnou" a měla by mu lidsky vysvětlit, že nastal problém, a dát mu minimálně možnost pokračovat na hlavní stránku webu. Tento typ problému jsme nalezli na 9 webových stránkách.
Výjimkou nebyly také dlouho neudržované redakční systémy. Pravidelné updaty by měly být na prvním místě nejen u open-source. Nejčastěji se tento problém týkal redakčního systému WordPress - všem 6 webům, které používaly tento systém, chyběly poslední bezpečnostní záplaty, některým i více než 2 roky. Osobně mě to velmi zklamalo, protože jsem velkým fanouškem WP (přestože k němu mám mnoho výhrad) - dokonce několik let patřím k organizátorům největší české WordPress konference WordCamp Praha. Problém se však týkal i dalších redakčních systémů, zastoupených většinou po jednotkách.
Aktualizace chyběly i serverovým technologiím, a tak jsme mohli potkat například PHP verze 5.4.16, které je už více než 6 let. Celkem 4 weby se nám v HTTP hlavičkách pochlubily, že používají již dlouho nepodporované PHP řady 5. Vzhledem k tomu, že většina webů v produkci přesnou verzi PHP tají, může být realita ještě o něco horší. Updaty často chyběly i webovému serveru Apache. Problémy byly ale často i na druhé straně - na frontendu - kde jsme často naráželi na různé javascriptové knihovny se známými bezpečnostními chybami.
Tip: "životnost" jednotlivých řad PHP můžete sledovat na https://www.php.net/supported-versions.php
Pokud si dobře vzpomínám, letos to byl první ročník, kdy všechny přihlášené weby fungovaly na zabezpečeném protokolu HTTPS. U 6 webů však nebyl úplně správně nastaven a podporoval například zastaralá šifrování, nebo byl zranitelný k různým typům útoků.
Tip: jak dobře máte nastaven protokol HTTPS můžete zjistit na https://www.ssllabs.com/ssltest/analyze.html a není důvod zde nezískat skóre A+,
Při nasazení HTTPS je další disciplínou správné přesměrování z HTTP na HTTPS verzi. 10 webů s tím mělo drobné problémy a například odstraňovaly při přesměrování parametry z URL adres, což může zkreslovat analytiku
Tip: jak se váš web chová k parametrům v URL si můžete otestovat na https://www.ppc-robot.net/cs/autotagging-tester/
Méně známým problémem, který však vykoukl na více než polovině webů, je použití odkazů (často na sociální sítě) s parametrem target=_blank bez atributu rel=noopener nebo noreferrer. To umožňuje stránce otevřené v novém okně získat kontrolu nad URL adresou původní stránky a může ji třeba někam přesměrovat.
Jsem rád, že se pomalu začíná prosazovat používání souboru security.txt, který jsme letos nalezli na 12 webech - díky tomuto souboru je totiž mnohem snažší nahlašovat nalezené bezpečnostní chyby.
Prakticky každý rok nalezneme web, kde nás objevené bezpečnostní chyby tak vyděsí, že rovnou kontaktujeme tvůrce dlouho před vyhlášením výsledků. Letos tomu tak bylo v jednom případě.
Lepší představu o stavu přihlášených webů si můžete udělat při pohledu na rozložení bodového hodnocení za technické zpracování webů, musím však upozornit, že je to pouze jedno z několika hodnotících kritérií.
Pozitivní fakt je to, že v průměru se úroveň webů každý rok zvyšuje, tento trend rozhodně nelze přehlédnout. Nicméně je to způsobeno především tím, že podprůměrné mizí, nebo se zlepšují. Ty nadprůměrné nám však stagnují a postupně se z nich stávají prostě průměrné.
Počet nalezených problémů však také jasně říká, že přihlásit web do WebTop100 dává velký smysl - projde rukama několika porotců a ti na něm často během chvilky naleznou ty nejpalčivější problémy.
Doufám, že příští rok budu jásat více, je to na vás 😉