TBO_Lab1 - Podatności XSS #69
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
W aplikacji Flask_Book_Library znalezione zostały podatności typu cross site scripting (XSS), wektory ataku to między innymi:
Aby zreplikować atak, należy wpisać do dowolnego formularza (np. Add New Book) skrypt HTML'owy, który w chwili wstrzyknięcia wykonuje polecenie w nim zawarte (np. alert / obrazek / pokolorowany tekst LOL). Podatność ta wynika z wykorzystania w aplikacji niebezpiecznych modyfikatorów HTML'owych, jak np. |safe, dane takie nie są automatycznie analizowane przez silnik Jinja2, przez co możliwe jest wywołanie złośliwego kodu przez użytkowników.
Aplikacja posiada dodatkowo inne wady, jak np.: możliwe jest wpisywanie dowolnie długich ciągów znakowych, które nie są weryfikowane przez regex. W Pull Requeście został zaimplementowany prosty mechanizm działający od strony backendu, który ma za zadanie sprawdzić, czy długość ciągu nie przekracza 64 znaków (domyślnie w db tak ustawiono), a także czy nie zawiera znaków specjalnych, mogących być częścią ataku. Rozwiazanie to można ulepszyć, między innymi dostosowując aplikację do stosowania innego mechanizmu wprowadzania danych, jak np. przez Formularze WForms (są obecnie niewykorzystane, a ich wdrożenie jest na chwilę obecną problematyczne). Wykorzystanie Jsonify do wyrzucania błędu o niepoprawnych danych nie jest najlepszym rozwiązaniem ze względu na wyrzucany trace log dla operacji AddNewBook, jednakże skutecznie blokuje próbę wstrzyknięcia danych, które mogłyby wpłynąc na integralność bazy danych (IntegrityError, może wywołać crash całej aplikacji).
Aby temu zaradzić, w obecnej wersji aplikacji pozbyto się modyfikatorów |safe, które zakładały, że dane wejściowe są sterylizowane. Innymi sposobami na radzenie sobie z tym jest wykorzystanie funkcji takich jak bleach, które wykonają to zadanie w zbliżony sposób.
Więcej informacji znaleźć można w plikach XSS.md, oraz DDD.md, które opisują zrealizowane zadania.