Encoding: ESAPI
Pokazanie przykładów niewłaściwego encodingu mamy za sobą (patrz: #1, #2, #3, #4 i #5). Na koniec przykład: http://bootcamp.threats.pl/lesson09b/, w którym encoding jest realizowany za pośrednictwem ESAPI (konkretnie owasp-esapi-php, jest to jeszcze wersja nieprodukcyjna). Dane wpisane przez użytkownika wypisywane są w trzech miejscach, w których encodowane są przy pomocy funkcji:
- encodeForJavaScript,
- encodeForJavaScript i encodeForHTMLAttribute
- encodeForJavaScript,
Funkcja doStuff obecnie coś robi, konkretnie wypisuje wartość otrzymanego parametru w drugim textarea. Zrobiłem to po to, by każdy mógł się przekonać, że te dziwne znaczki, które generuje ESAPI to rzeczywiście to, co zostało oryginalnie przekazane. A te dziwne znaczki wyglądają tak:
Dla encodeForJavaScript w kontekście atrybutu HTML:
demo 1
Dla encodeForJavaScript i encodeForHTMLAttribute w kontekście atrybutu HTML:
demo 2
Jeszcze raz dla encodeForJavaScript , tym razem w kontekście skryptu:
Mam nadzieję, że ten przykład wystarczająco dobrze pokazuje, że:
- encoding może być prosty, wystarczy wywołać odpowiednią dla kontekstu funkcję,
- encoding może być skuteczny (ktoś potrafi obejść encoding implementowany przez ESAPI i wykorzystany w tym przykładzie?),
- mimo encodingu wszystko może nadal działać,
I tym optymistycznym akcentem kończę ten temat. Przynajmniej na jakiś czas.
Oryginał tego wpisu dostępny jest pod adresem Encoding: ESAPI
Autor: Paweł Goleń