Zabezpečení webových stránek a aplikací
27. 6. 2021Základní bezpečnostní tipy pro PHP naleznete v předchozím příspevku PHP: Bezpečnostní tipy a dnes se podíváme na rozšířenější možnosti jak zabezpečit aplikaci nebo webovou stránku.
Secure Sockets Layer (SSL)
Komunikace mezi klientem a serverem na protokolu HTTP není šifrována a proto ji lze snadno odposlouchávat. Zabezpečte komunikaci SSL technologií, která bude probíhat na protokolu HTTPS a je šifrovaná platným důvěryhodným certifikátem.
Většina hostingových služeb dnes nabízí SSL s certifikátem od autority Let's Encrypt zdarma k hostingu. Pro nasazení technologie na vlastní server můžete využít například nástroje Certbot (https://certbot.eff.org/) který podporuje jak webový server Apache tak Nginx.
Content Security Policy (CSP)
Aplikace nebo samotná webová stránka se dnes málo kdy obejde bez širokého spektra závislostí nutných pro distribuci obsahu nebo zaručení funkčnosti. Běžně se využívají externí CDN zdroje pro distribuci scriptů, stylů a dalších součástí. V rámci aplikace je důležité nastavit pravidla pro důvěryhodné zdroje a zamezit tak možnosti vložení cizího fragmentu do dokumentu obsahující škodlivý program.
Pro tento způsob zabezpečení slouží pravidla CSP a možnosti nastavení nalezene na https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP.
Rozšířené hlavičky dokumentů
Kromě pravidel CSP existují i další hlavičky upravující bezpečnost. Seznam možností včetně příkladů naleznete na https://securityheaders.cz.
Completely automated public Turing test to tell computers and humans apart (Captcha)
Zabraňte vyplňování formulářů automatem (robotem). Captcha je Turingův test pro rozlišení robota od člověka. Nejčastěji její interpretaci naleznete v podobě obrázku s textem.
Naštěstí dnes již existují “neviditelná” řešení která ne vyžadují přímou interakci od uživatele například Google reCaptcha V3 invisible https://developers.google.com/recaptcha/docs/v3.
Brute-force protection
Brute force attack, česky útok hrubou silou spočívá v uhodnutí přístupových údajů testováním všech možných kombinací. Sada kombinací se buď automaticky generuje ze zvolených znaků a nebo za využití takzvaného slovníku obsahující často používané kombinace. Dnes díky snadné dostupnosti nástrojů je tato metoda útoku masivně rozšířená a směřujese na vstupy aplikace jako je API nebo přihlašovací formuláře.
Ochrana před tímto útokem spočívá v omezení možných neplatných pokusů o přístup a následné odstřižení kanalu útoku. Jako velice jednoduchý příklad si představme přihlašovací formulář do administrace systému kde budeme zaznamenávat počet neúspěšných pokusů o přihlášení uživatele a po třech neúspěšných pokusech zablokujeme IP adresu uživatele.
Two-Factor Authentication (2FA)
Pro potvrzení identity přihlášeného uživatele a nebo potvrzení transakcí můžeme využít propojení identity s telefonním číslem uživatele na které vždy zašleme autorizační token pro potvrzení. Kromě klasických SMS zpráv můžeme využít i automatizovaný hovor a nebo například aplikaci Google Authenticator.
Decentralizované zdroje data
Jednotlivé data rozdělte do vlastních úložišť podle typu které zároveň budou navzájem od sebe separované. Provozovat více služeb poskytující data na jednom serveru-prostoru není bezpečné. Při prolomení zabezpečení serveru útočník získá snadný přístup ke všem zdrojům dat.
Šifrování dat
Ukládejte důležité data v zašifrované podobě za použití dostatečně silného standardu a pravidelně provádějte bezpečnostní audit procesů a použitých klíčů.
Silná bezpečná hesla
Vyžadujte používání silných přístupových údajů nejen pro přístup do zdroje dat (např. databáze, API služby), ale i pro samotné uživatele. Uživatele může iritovat složité a hůře zapamatovatelná hesla, ale je to na úkor bezpečnosti jejich účtu a samotné webové aplikace (bezpečnost nad uživatelskou přívětivost).
Behaviorální zabezpečení
Komplexní systém ochrany založen na behaviorální analýze a nebo behaviorální biometriky. V praxi se používají jejich vzájemná kombinace. Pokročilé zabezpečení vyhodnocuje chování uživatele pro ověření jeho identity (dnes často za využití nástrojů umělé inteligenci). Implementace a vývoj řešení je náročný proces a proto se nejčastěji využívá u kritických aplikací jako je například internetové bankovnictví.
Doufám že tento příspěvek pomůže začínajícím vývojářům si rozšířit znalosti v zabezpečení aplikací a pomůže udělat digitální svět zas o kousek bezpečnějším místem.