Привет, Хабр! Недавно я опубликовал статью про свою библиотеку — crashprobe, которая перехватывает ошибки в синхронном коде Python и потоках, а затем генерирует о них красивый HTML или TXT отчёт.
Статья получила хорошие результаты, а читатели помогли сделать библиотеку лучше и безопаснее. Так внимательный читатель @vldmrmlkv обратил внимание на критическую уязвимость в безопасности версии 0.4.0.
В чём заключалась уязвимость?
Crashprobe собирает множество полезной в дебаге информации об ошибке, а потом вставляет её прямо в HTML шаблон. Уязвимость была предельно проста: я забыл поставить HTML экранирование при вставке заголовка ошибки (несмотря на то, что во всех остальных частях отчёта экранирование присутствовало😂). Тем самым если в тексте ошибки было вставлена HTML команда (например: raise Exception("<script>alert('XSS')</script>")) браузер выполнил бы эту команду, а сам отчёт получился не корректным.
Как я это исправил?
Благодаря подсказке читателя я выпустил патч 0.4.1, в котором исправил всё парой строчек кода, а именно добавил html.escape() в функцию генерации отчёта. Теперь любые теги отобразятся как безопасный текст.
Вместо вывода
Эта история — хороший пример того, что не нужно бояться показывать свой код миру, ведь open source и комьюнити всегда помогут сделать код лучше. Спасибо @vldmrmlkv за бдительность!
Теперь crashprobe безопасен. Если хотите видеть красивые HTML отчёты вместо скучных трейсбеков — ставьте или обновляйте библиотеку одной командой:
pip install --upgrade crashprobe
Спасибо что дочитали до конца! Буду рад фидбеку в коментариях!
ссылка на оригинал статьи https://habr.com/ru/articles/1050268/