Skip to content

Conversation

@pawelmuller
Copy link

Analiza podatności XSS w aplikacji biblioteki książek (Python)

book-library

Znalezione podatności

Formularz dodawania książek

  • Podatnością jest możliwość wstrzyknięcia kodu JS w polach Name oraz Author.
  • Po zapisaniu danych kod jest wyświetlany na liście książek, co powoduje jego wykonanie.
adding-new-book xss

Bonusowo: W pole Year published można wpisać ujemną liczbę.

Analogiczna podatność występuje w formularzu dodawania klientów - w polach Name oraz City.

Wprowadzone poprawki

Poprawki wprowadziłem jedynie dla klasy Book, ponieważ w innych polach sposób działania może być analogiczny.

W ramach poprawy błędu wprowadziłem dodatkową walidację pól Name oraz Author przy użyciu wyrażeń regularnych:

if not re.compile(r"^[A-Za-z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\-–—:;,.!?'\"()\[\]/&„”«»]{1,255}$").match(name):
    raise ValueError("Invalid book name.")
if not re.compile(r"^[A-Za-ząćęłńóśźżĄĆĘŁŃÓŚŹŻ\.\s\-']{2,100}$").match(author):
    raise ValueError("Invalid author name.")

Jeśli nazwa książki nie składa się z polskich znaków (dowolnej wielkości), cyfr i niektórych znaków specjalnych - nie jest ona dopuszczana (rzucany jest wyjątek ValueError z prostym opisem). Minimalna długość ciągu znaków to 1, a maksymalna 255.

Analogicznie działa to w przypadku autora.

Testy

Do pliku requirements.txt dopisałem odpowiednie zależności (pytest), więc testy można bardzo prosto uruchomić z poziomu kontenera:

docker ps
docker exec -it <id kontenera aplikacji> bash
pytest

W wyniku wykonania testów powinniśmy otrzymać następujący rezultat:

user@host TBO-task1 % docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS                    NAMES
1bfc378614b9   task1-python   "flask run"   5 seconds ago   Up 4 seconds   0.0.0.0:5555->5000/tcp   stoic_almeida

user@host TBO-task1 % docker exec -it 1bfc378614b9 bash

root@1bfc378614b9:/app# pytest
==================================== test session starts =====================================
platform linux -- Python 3.9.25, pytest-8.4.2, pluggy-1.6.0
rootdir: /app
collected 28 items 
tests/test_book.py ............................[100%]

===================================== 28 passed in 0.30s =====================================

@pawelmuller pawelmuller changed the title Paweł Müller - lab 1 Paweł Müller - lab 1 (fix: podatności XSS) Nov 13, 2025
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