Milan Kryl

Kryl Blog - RSS

5 kroků k zachování bezpečnosti

04. 04. 2005 - 23:51

Pro zkušené trivialita, pro ostatní zajímavé opakování a nebo novinka. Pět základních bodů, které ochrání vaše výtvory před nezvanými hosty. Hlavně v případě internetových aplikací je musíte mít stále na paměti.

Klíč je v systematické obraně

Je velmi obtížné připravit aplikaci na každý potencionální útok. Pokud bude vaším cílem pouze ochrana před všemi různými útoky, tak se utopíte v problémech. Nakonec vás některý z útočníků překvapí něčím nečekaným a do vaší aplikace se dostane.

Mnohem lepší je pořádně celou aplikaci navrhnout již před její tvorbou. Tím se získá i mnohem spolehlivější aplikace. Mnoho bezpečnostních incidentů bylo zapříčiněno nějakou chybou aplikace.

Základních 5 bezpečnostních vodítek

Následující seznam berte jako několik vodítek pro vytváření bezpečnějších internetových aplikací.

  • Nikdy nevěřte datům od klientů
  • Nikdy nezakládejte bezpečnost na utajení (security through obscurity)
  • Udělujte pouze nejnutnější přístupová práva
  • Vždy používejte nejjednodušší řešení
  • Vždy ochraňujte citlivé údaje

1. Nikdy nevěřte datům od klientů

Toto pravidlo porušuje většina nezkušených webových vývojářů. Většina programátorů si ani neuvědomuje, že jej porušuje. Většinou vychází z nedostatečného pochopení celého fungování internetových aplikací.

Aplikace přebírá data z nějakého zobrazeného formuláře. Nezkušený programátor si ale neuvědomuje, že po odeslání z klienta cestují po internetu až na server. Není nic jednoduššího, než data modifikovat a poslat přímo (místo použití formuláře).

Žádným takovým datům slepě nedůvěřujte a ověřte, že opravdu obsahují pouze takové hodnoty, které mají.

2. Nikdy nezakládejte bezpečnost na utajení (security through obscurity)

Toto slovní spojení je velmi známé, na rozdíl od jeho praktického významu. Ten již každý netuší. Bezpečnost založená na utajení je typ ochrany, která spoléhá na nějakou neznalost. Například budete mít na stránkách uloženou nějakou tajnou stránku. Adresa je poskytnuta pouze důvěryhodným společníkům. Znalost adresy je potom zabezpečení spoléhající pouze na utajení.

Dalším typickým příkladem je slabý šifrovací algoritmus, který spoléhá na zatajení informací o jeho fungování. Ve většině případů takový algoritmus pravděpodobně nevydrží moc dlouhou odolávat. Jako příklad můžete vzít CSS pro kódování DVD filmů (DeCSS - pro přehrávání filmových DVD s omezením na určitý region).

Utajení není vůbec špatná taktika. Pouze se na ni nesmí zcela spoléhat a zabezpečení na ní nesmí být založeno.

3. Udělujte pouze nejnutnější přístupová práva

Pro svůj běh nemusí mít internetová aplikace všechna práva, co se hodila při jejím vývoji. Před nasazením na ostrý server popřemýšlejte, která přístupová práva jsou nutná a ostatní odstraňte. Některé z opomenutých práv může vést ke kompromitaci celého serveru.

Totéž platí i v případě, pokud vaše internetová aplikace umožňuje spravovat uživatelské účty a přidělovat jim různá práva. Uživatelé by měli mít pouze taková přístupová práva, která nutně potřebují. Cokoliv navíc představuje zbytečné bezpečnostní riziko.

4. Vždy používejte nejjednodušší řešení

I pro zkušené vývojáře může být nebezpečnou nástrahou. Vytvářená aplikace se během vývoje upravuje tak dlouho, až je překombinovaná a příliš komplikovaná. Někteří tvůrci mají tendence vytvářet mnohem komplexnější řešení, než kterým jsou schopni sami porozumět.

Pokud je nutný pouze jednoduchý design, může si tvůrce aplikace přidat něco, protože ho to baví a chce mít nějakou další funkčnost navíc. Ačkoliv se tento počin může zdát velmi užitečný, může představovat přidanou bezpečnostní díru. Čím komplexnější je design aplikace, tím jednodušší je na něco zapomenout a nebo si něčeho nevšimnout.

Vhodnější je udržovat návrh aplikace elegantní a jednoduchý. I když budete přidávat detailní komentáře, nic se nevyrovná pěkně napsanému a přehlednému kódu.

5. Vždy ochraňujte citlivé údaje

V minulosti bylo mnoho případů kompromitace různých databází, ať již s uživatelskými hesly, kreditními kartami a nebo rodnými čísly. Vždy mělo neblahé následky pro provozovatele nebo firmu, provozující danou službu.

Ne všechna data je třeba uchovávat zpětně čitelné. V případě hesel je rozumné jejich zahašování do nečitelné podoby. Znalost hesla lze jednoduše ověřit hašováním zaslaného hesla a porovnáním obou vzorků. Pokud je taková databáze náhodou kompromitována, je získání takto uložených hesel většinou velmi těžké a někdy dokonce nemožné. Je třeba nepoužít nebezpečných hašovacích funkcí - jakou se stala například oblíbená MD5.

V některých případech je třeba data zpětně získat (například pokud se jedná o kreditní karty). V tom případě je nejlepší uvažovat o symetrickém nebo asymetrickém šifrování. A nemluvě o tom, že by měla komunikace mezi klientem a serverem probíhat po šifrovaném HTTPS spojení.

Uložte do paměti a mějte nadhled

Těchto pět základních bodů byste měli mít stále na paměti, když budete tvořit nějakou internetovou aplikaci. Zůstane vám potřebný nadhled a časem je budete používat zcela automaticky. Aplikace se vám odmění větším zabezpečením a tím pádem i menším počtem bezpečnostních incidentů.

 

Tip: Krátké zprávy a zajímavosti (rychlý přístup https://kryl.info/kratce)

Související