Bootcamp IX: encoding (przykład)

Tym razem trochę pracy u podstaw. Jest to praktyczna demonstracja tego, że encoding danych wyjściowych jest potrzebny oraz tego, że powinien być realizowany w sposób zależny od kontekstu, w którym dane są użyte.

Przykład dostępny jest pod adresem: http://bootcamp.threats.pl/lesson09/. W przykładzie dostępne są trzy możliwości encodingu:

Encoding jest realizowany za pośrednictwem funkcji htmlentities z różnymi parametrami wywołania. W planach miałem użycie funkcji z ESAPI, ale wersja dla PHP jest jeszcze w powijakach. Rezultat funkcji encodeForHtml oraz encodeForHtmlAttribute zaimplementowanych przeze mnie przy pomocy htmlentities mniej więcej odpowiada temu, co wielokrotnie spotykałem w testowanych przeze mnie aplikacjach.

Przekaazna przez użytkownika wartość jest encodowana przy pomocy wskazanej funkcji i wypisywana w kilku kontekstach:

Można sobie poeksperymentować jak w tych kontekstach osadzić XSS i co powoduje zastosowanie dostępnych do wyboru funkcji w danym kontekście.

UWAGA: w ramach premii schowałem “niezamierzonego” XSS, którego mechanizm widziałem w kilku testowanych przeze mnie aplikacjach różnych producentów.

Oryginał tego wpisu dostępny jest pod adresem Bootcamp IX: encoding (przykład)

Autor: Paweł Goleń