Bezpečnost především – zamezení interpretace HTML kódu
Velice častou chybou v případech, kdy zobrazujete nějaký vstup od uživatele přímo, bez jakékoli kontroly, je, že uživatel může do textu vložit nějaké HTML tagy, ale také povely JavaScriptu (!). Populární je nastavení barvy písma na barvu podkladu, vložení nějakého hodně velkého a nebo hodně „obnaženého“ obrázku apod.
Vložený HTML kód je mnohdy i žádoucí (vložení odkazu, zvýraznění textu, například pomocí DHTML editoru), ale může zničit vzhled celé stránky. Neuzavřená tabulka způsobí, že se zbytek kódu již nezobrazí. Vložení meta-tagu pro refresh může způsobit přesměrování stránky úplně jinam. Ještě dnes naleznete na webu řadu knih návštěv, které lze naprosto ochromit vložením takovéhoto příspěvku:
<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=http://nejaka_nesmyslna_stranka.cz">
Vložený JavaScript může nejen poškodit vzhled stránky, přesměrovat stránku, ale může pomocí různých technik způsobit závažný bezpečnostní problém. Jde o tzv. session stealing a cross-site skripting a z toho plynoucí možný přístup třeba k cookies, které si stránka ukládá. Principy těchto technik probereme v dalším pokračování seriálu. Každopádně je nutné si uvědomit, že povely JavaScriptu lze vkládat s určitým omezením i jako parametr standardních HTML tagů. Jedná se o obsluhy různých událostí – onmouseover, onclick a další. Například pokud vložíme do diskusního fóra dlouhý text, který nelze zalomit, a nastavíme maximální velikost fontu, je na více než 90 % pravděpodobné, že čtenář takové stránky přejede přes tento text myší. Pokud zároveň do tagu font uvedeme povel pro přesměrování při přejetí myší, můžeme stránku třeba přesměrovat úplně jinam a to i tehdy, pokud jsme zakázali možnost vložení meta-tagu pro přesměrování.
|
Chceme-li vytvořit knihu návštěv, diskusní fórum nebo chat, které mají být "žumpou", kam může kdokoli vložit cokoli (a já netvrdím, že to je špatně, někdy je prostě potřeba mít i takovouto aplikaci, když to návštěvníky stránek baví), je vše vpořádku. Pokud ale potřebujeme seriózní aplikaci, nebo velmi bezpečnou aplikaci, je potřeba z odesílaných příspěvků nebezpečné části odstranit. V závislosti na tom, jak moc bezpečná, řekněme "sterilní", má aplikace být, je třeba vyřadit celé tagy nebo vyřadit klíčová slova jako onmouseout, onmouseover anebo překonvertovat znaky <>
na entity < >
. Tagy se tak překonvertují na běžný text a nebudou se interpretovat (toto například umožní vkládání ukázek HTML kódu). Z již zmíněné možnosti session stealingu je velmi nevhodné umožnit vkládání odkazů, a to i konverzí vložených URL na odkazy.
V PHP nám k různým úpravám předávaných textů poslouží tyto funkce:
|
Posledním "hitem" používaným v různých diskusních forech je umožnit vkládání tagů pomocí speciální syntaxe, kerá je odlišná od HTML kódu. Teprve po odeslání příspěvku je tento pomocí regulárních výrazů upraven do korektního HTML kódu. Syntaxi si může každý zvolit vlastní, ohledně regulárních výrazů najdete několik článků zde na intervalu. Zde dávám jen ukázku, jak například vložit obrázek do takto řešeného diskusního fóra:
|
Věřím, že si z nabízených možností vyberete pro váš případ tu nejvhodnější. V dalším díle bude detailně rozveden princip cross-site skriptingu, proti němuž je nutno se bránit i v tomto článku zmíněným odstraněním HTML tagů.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Aktualizujete svoji .NET webovou aplikaci? Může se hodit app_offline.htm
10. července 2024 -
Gaming na HDR monitoru: Stojí to za to?
12. srpna 2024 -
Globální výpadek IT systémů: Může za to jediná aktualizace
19. července 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024