Дев написал «TODO: убрать перед прод-деплоем» — и это пролежало в проде два года
Есть комментарии в коде, которые являются либо руководством к действию, либо тихим криком о помощи. Комментарии с «TODO» — это обещания, которые редко выполняются.
Денис, бэкенд-разработчик с которым я пересекался на одном проекте, рассказал мне эту историю как предупреждение. История произошла на его предыдущем месте работы.
Был endpoint /api/debug/users — он возвращал список всех пользователей с email, именами и датами регистрации. Без всякой авторизации. Создан во время разработки, чтобы фронтенд-разработчик мог быстро проверять данные.
В коде стоял комментарий:
# TODO: УБРАТЬ ПЕРЕД ДЕПЛОЕМ В ПРОД!!!
# Только для разработки, не для продакшна
@app.route('/api/debug/users')
def debug_users():
users = User.query.all()
return jsonify([u.to_dict() for u in users])
Три восклицательных знака. Заглавные буквы. Всё честно.
Разработчик сделал деплой. TODO не убрал — дедлайн, «потом». Потом не наступило.
Endpoint жил в проде тихо и незаметно два года. Через два года при проведении security audit penetration tester обнаружил его за тридцать секунд работы с Burp Suite. База данных на тот момент содержала информацию о 340,000 пользователей. Всё это время данные были доступны любому, кто знал URL.
Конца истории Денис не знает — его к тому времени уже не было в той компании. Знает только что был большой скандал и несколько уволенных.
В нашей команде после этой истории появился CI-шаг: grep по всему коду на паттерны TODO.*прод, TODO.*prod, REMOVE BEFORE, DEBUG ONLY. Если находит — пайплайн падает с ошибкой. Работает без единого ложного срабатывания уже полтора года.
Recommended Comments