threats.pl > Bezpieczeństwo aplikacji internetowych > Lekcja 9: Właściwy encoding danych

Lekcja 9: Właściwy encoding danych

Wprowadzenie

Encoding danych jest jednym z bardziej istotnych elementów bezpieczeństwa w aplikacjach internetowych. Błędy związane z brakiem encodingu lub jego niewłaściwym stosowaniem znalazły się na liście 2009 CWE/SANS Top 25 Most Dangerous Programming Errors na drugim miejscu: CWE-116: Improper Encoding or Escaping of Output.

Przykład

Encoding musi być odpowiedni, czyli właściwy dla kontekstu, w którym dane zostaną użyte. W przykładzie http://bootcamp.threats.pl/lesson09/ wykorzystane są przykładowe trzy sposoby encodingu danych:

Dane przekazane przez użytkownika wypisywane są w kilku kontekstach:

Dla każdego z kontekstów można wskazać przykład danych powodujących Cross-Site Scripting. By przeciwdziałać tej podatności należy zastosować właściwy encoding. Można sprwadzić jak zastosowanie niewłaściwego encodingu powoduje, że podatność nadal istnieje.

Dobrym początkiem testów jest sprawdzenie zachowania poszczególnych funkcji dla ciągu '';!--"<XSS>=&{()}. Można zobaczyć jakie znaki są w poszczególnych przypadkach encodowane, co z kolei pozwoli na stwierdzenie, czy dla danego encodingu w danym kontekście możliwe jest wykonanie XSS.

Jako przykłady biblitek pozwalających na łatwą realizację właściwego dla kontekstu encodingu danych wyjściowych można wskazać:

Warto zwrócić uwagę, że ESAPI, podobnie jak i AntiXSS, udostępnia szereg funkcji realizujących encoding odpowiedni dla różnych kontekstów użycia danych. Przykłady funkcji z biblioteki ESAPI:

Co do zasady należy:

Poza zamierzonymi przykładami XSS jest jeden "bonusowy", to tak w ramach prostego wyzwania.

Zobacz też

Zobacz też przykład http://bootcamp.threats.pl/lesson09a/, jego wyjaśnienie: Ćwiczenia z niewłaściwego encodingu, oraz:

A na zakończenie coś bardziej optymistycznego: Encoding: ESAPI.