Crashprobe: как я заделал критическую уязвимость в версии 0.4.1

от автора

Привет, Хабр! Недавно я опубликовал статью про свою библиотеку — 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/