Код-ревью 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)}
Коротко
Массовая выгрузка данных одна из самых опасных функций: через неё утекают базы. Нужны отдельная роль, минимальный набор полей, аудит с алертом, защищённое хранение и подписанные ссылки с коротким сроком.
Что должен найти ревьюер
- Безопасностьстрока 2Проверяется только вход, не роль: любой сотрудник с учёткой выгрузит всю базу клиентов.
- Безопасностьстрока 4
SELECT *выгружает все поля, включая лишние ПДн: нарушение минимизации. - Безопасностьстрока 5Предсказуемое имя файла во временной папке, файл не удаляется.
- Безопасностьстрока 8Выгрузка в публичный бакет: ссылка доступна любому, кто её получит. Нужна короткая подписанная ссылка.
- Безопасностьстрока 9Действие не журналируется: кто и когда выгрузил базу, восстановить нельзя (Repudiation), нет алерта на массовую выгрузку.
Разбор
Массовая выгрузка данных одна из самых опасных функций: через неё утекают базы. Нужны отдельная роль, минимальный набор полей, аудит с алертом, защищённое хранение и подписанные ссылки с коротким сроком.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Логирование, реагирование и ПДн»
- Уведомление об утечке по 152-ФЗ
- Локализация персональных данных
- Усталость от алертов
- Маскирование email и номеров карт в логах
- Экранирование значения для лога
- Что 152-ФЗ требует от разработки
- Этапы реагирования на инцидент
- Поля записи события безопасности