Záběr přednášky
.
- Bezpečnost na webu zahrnuje:
- serverový operační systém
- webový server
- webovou aplikaci
- přenos po síti (šifrování, man in the middle, ...)
- klientský operační systém
- klientský prohlížeč
- sociální inženýrství – hoaxu, phishing
- Zaměříme se pouze na HTML, HTTP a JavaScript
Úvod – URL
.
- URL je základem webu
- Jednoznačně identifikuje zdroj/soubor
- např. počasí
- dej mi aktuální počasí pro dnešek
- počasí pro 4. 7. 2008
Úvod – HTTP
.
- GET by neměl modifikovat data na serveru
Úvod – Stavové HTTP
.
- Cookie je krátká pojmenovaná informace, která se po přijetí posílá s každým dalším požadavkem
- je omezena na doménu
Injection a SQL Injection
.
Injection a SQL Injection
.
- Takto můžu přečíst všechna data z této tabulky nebo i z libovolné jiné (např. UNION)
- přečtu databázi hesel
- U PHP eval můžu vykonat libovolný kód na serveru
Správné řešení SQL Injection
.
- Používat pojmenované parametry
- Hned vidím při review kódu
- pokud systém správně nepodporuje, tak používat alespoň nějaké owrapování - např. addslashes
Spuštění souboru
.
- Toto je forma injection
- Musíme hlídat vstup. Mapa hodnot na soubory.
- Už není takový problém.
- Ovoce: Tamarillo
- USB klíčenky v bance
Krádež session
.
- Náhodný identifikátor (rovnoměrné rozložení)
- Více lidí sdílí IP adresu.
- Nechci se pokaždé přihlašovat.
Krádež session
.
- Zkrátit platnost session a hlídat IP adresu
- Mít dva režimy - automatické přihlášení s dlouhou dobou a skutečné přihlášení s krátkou dobou. Při přechodu se zadá heslo.
Krádež session – obrana
.
- Zkrátit platnost session a hlídat IP adresu
- Mít dva režimy - automatické přihlášení s dlouhou dobou a skutečné přihlášení s krátkou dobou. Při přechodu se zadá heslo.
- U URL session je nutné přesměrovat na uživatele – tj. pomocí refresh v HTML stránce uživatele přesměrujete na novou stránku. Nelze totiž v tomto případě použít přesměrování v protokolu HTTP (302 Location), protože nedojde ke změněně refereru.
Cross Site Scripting (XSS)
.
- Pozor na chybové stránky!
- používat takové systémy, které při výpisu textu na obrazovku rovnou vše správně převedou na entitní vyjádření. Texty, které převést nechceme, pak musíme explicitně označovat. Pokud by tomu bylo naopak (označili bychom text, který se má převést), mohli bychom snadno přehlédnout nebezpečné místo a způsobit tak chybu typu XSS.
WYSIWYG a XSS
.
- není definované, jak se mají prohlížeče chovat při chybě
- připravuje se lepší definice chování při chybě - HTML5
WYSIWYG a XSS – oprava HTML
.
WYSIWYG a XSS – vyčištění
.
- Dobré je i na kód vložený z wordu - pročistí jej
- Samy je jeden z prvních XSS virů na MySpace
Ukázka Samy
.
- Samy
- Všimněte si rozdělení java script na dva řádky
- URL Panel jako obrázek a skrytí panelu
- Banerové systémy - XSS
Cross Site Request Forgery (CSRF)
.
- pokud confirm=1 určuje, že se mají peníze odeslat, opravdu k tomu dojde
- Celé se to děje v prohlížeči uživatele!
- Kdo z vás se odhlašujete z banky (zneplatňujete session?)
- Když ne u banky - kdo máte přístup do redakčního systému a zde se odhlašujete?
- Kdo si ve své poště nastavíte - pamatuj si mne?
- u Banky to není takový problém - je zabezpečená a připojím se klidně z jiného prohlížeče
- AJAX a JSON nám vše komplikuje
CSRF – Jak se bránit?
.
- POST není řešení - mohu jej JavaScriptem odeslat
- Jiný režim je možný pouze u banky
CSRF – Druhý kanál
.
- CAPTCHA je sporná - už se to umí strojově, případně armáda luštičů
CSRF – HTTP Referer
.
- odkaz z FTP
- Pozor na redirector session a zneužití
CSRF – Pořadí stránek
.
- Tohle jde proti filozofii HTTP a RESTu
- Nemůžeme mít v mailu odkaz, který bez potvrzení záznam smaže (spam) - to je stejně lepší nedělat
- Potvrzovací formulář - problém u AJAXu
CSRF – Krátká session
.
- Session přes URL - dva druhy session cookie + URL
CSRF – Zabránit XSS
.
- Co třeba takový kontaktní formulář na stránce banky - neobsahuje XSS?
JS Hijacking
.
- Bráníme se jako CSRF
- Můžou být další chyby - nejlepší je dotaz vůbec nedělat
- CSS detekce navštíveného prvku
- OT: Klikací hra a potvrzení