threats.pl > Bezpieczeństwo aplikacji internetowych > Lekcja 23: Oczyszczanie HTML jest trudne

Lekcja 23: Oczyszczanie HTML jest trudne

Spotkanie OWASP, rozwiązanie mini-konkursu

Mini-konkurs został rozstrzygnięty. Zwyciężył Kamil Reszczyk, gratuluję!

Nadesłane w trakcie konkursu rozwiązania (również te, które zaginęły w drodze) udostępniam tu: przykładowe rozwiązania zadania. Udostępniam również kod parsera wykorzystanego w przykładzie.

Wprowadzenie

Przykład ten jest inspirowany prezentacją The Presence and Future of Web Attacks Multi-Layer Attacks and XSSQLI, która chyba najbardziej podobała mi się na Confidence 2010.

Do tej pory przykłady dotyczyły prawidłowego kodowania (encodingu) danych. Ten przykład dotyczy oczyszczania (sanitization) przekazanych danych po to, by nie zawierały niebezpiecznego kodu. Jest to zadanie dalece trudniejsze niż prawidłowa walidacja oraz encoding danych.

Przykład dostępny pod adresem http://bootcamp.threats.pl/lesson23/ symuluje przypadek, w którym użytkownik może wpisać fragment kodu HTML. Może to być na przykład komentarz na forum czy opis aukcji internetowej. Aplikacja przed wyświetleniem wpisanych przez użytkownika danych dokonuje ich oczyszczenia usuwając (w założeniu) wszystkie niebezpieczne konstrukcje.

Przykład oparty jest na zasadzie białej listy dozwolonych tagów. Lista ta zawiera tagi:

Wszystkie atrybuty z wyjątkiem href oraz src dla tagów (odpowiednio) a oraz img są usuwane. Zadanie polega na znalezieniu takiej konstrukcji HTML, w której:

Przykład ten w zamyśle ma pokazać, że:

Ostatni punkt może być kontrowersyjny, ponieważ nawet gotowe, sprawdzone biblioteki mają błędy. Łatwiej jest jednak aktualizować bibliotekę do nowej wersji, niż śledzić i poprawiać własny kod.