Skip to content

Conversation

@Adamzientek
Copy link

1. Podatność XSS

W aplikacji webowej Flask Book Library znalazłem występowanie podatności typu Persistent Cross Site Scripting w formularzach dodawania książek, klientów i wypożyczeń. Podatność pozwalała na wstrzyknięcie i wykonanie kodu javascript w pola name i author w przypadku książek lub name i city w przypadku klienta. Pochodnie udawało się też wykonać kod przy przypisaniu nazwy książki lub nazwy klienta do danego wypożyczenia. Kod wykonywał się za każdym razem po wyświetleniu strony zawierającej rekord z przykładowym skryptem javascript <script>alert(1)</script>.

Umieszczenie złośliwych skryptów podczas dodawania nowej książki:
Books_XSS_1

Wykonanie skryptu js dla pola name:

Books_XSS_2

Wykonanie skryptu js dla pola author:
Books_XSS_3

Wygląd rekordu po jego dodaniu do bazy książek:

Books_XSS_4

Umieszczenie złośliwych skryptów podczas dodawania nowego klienta:

Customer_XSS_1

Wykonanie skryptu js dla pola name:

Customer_XSS_2

Wykonanie skryptu js dla pola city:

Customer_XSS_3

Wygląd rekordu po jego dodaniu do bazy klientów:

Customer_XSS_4

2. Koncepcja naprawy

W plikach models.py dla books, customers i loans dodałem sprawdzanie, czy dane podatne pola zawierają znaki specjalne - powinno wykrywać także próby ataków SQLi. W tym celu została napisana funkcja contains_special_chars, która wykrywa znaki specjalne z pomocą biblioteki re. Jeśli pole zawiera string ze specjalnymi znakami, zawarty w nim tekst jest poddawany sanityzacji przy użyciu funkcji escape z biblioteki MarkupSafe, która koduje znaki specjalne w html, co powoduje, że są one wyświetlane poprawnie w rekordach, lecz nie są poprawnie interpretowane jako część skryptu javascript.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant