Код-ревью Senior Логирование, реагирование и ПДн обновлено

Ревью: выгрузка клиентов на Python

Вопрос

Найдите проблемы безопасности, приватности и аудита в функции выгрузки.

@app.get("/admin/export")
@login_required
def export_clients():
    rows = db.execute("SELECT * FROM clients").fetchall()
    path = f"/tmp/export_{date.today()}.csv"
    with open(path, "w") as f:
        csv.writer(f).writerows(rows)
    upload_to_bucket(path, public=True)
    return {"url": public_url(path)}

Коротко

Массовая выгрузка данных одна из самых опасных функций: через неё утекают базы. Нужны отдельная роль, минимальный набор полей, аудит с алертом, защищённое хранение и подписанные ссылки с коротким сроком.

Что должен найти ревьюер

  1. Безопасностьстрока 2
    Проверяется только вход, не роль: любой сотрудник с учёткой выгрузит всю базу клиентов.
  2. Безопасностьстрока 4
    SELECT * выгружает все поля, включая лишние ПДн: нарушение минимизации.
  3. Безопасностьстрока 5
    Предсказуемое имя файла во временной папке, файл не удаляется.
  4. Безопасностьстрока 8
    Выгрузка в публичный бакет: ссылка доступна любому, кто её получит. Нужна короткая подписанная ссылка.
  5. Безопасностьстрока 9
    Действие не журналируется: кто и когда выгрузил базу, восстановить нельзя (Repudiation), нет алерта на массовую выгрузку.

Разбор

Массовая выгрузка данных одна из самых опасных функций: через неё утекают базы. Нужны отдельная роль, минимальный набор полей, аудит с алертом, защищённое хранение и подписанные ссылки с коротким сроком.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.