Код-ревью Junior OWASP Top 10 и API Top 10 обновлено

Ревью: настройки Flask-приложения

Вопрос

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

from flask import Flask
app = Flask(__name__)
app.config["SECRET_KEY"] = "dev"
app.config["SESSION_COOKIE_SECURE"] = False

@app.route("/health")
def health():
    import sys, os
    return {"python": sys.version, "env": dict(os.environ)}

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

Коротко

Классическая Security Misconfiguration: настройки для разработки уехали в прод. Защита: разные конфиги для окружений, секреты вне кода, проверка конфигурации в CI.

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

  1. Безопасностьстрока 3
    Секретный ключ захардкожен и угадываем: им подписываются сессии, атакующий подделает cookie. Брать из секрет-хранилища или переменной окружения, длинный случайный.
  2. Безопасностьстрока 4
    Cookie сессии уходит и по HTTP: на проде нужен SESSION_COOKIE_SECURE = True, а также HttpOnly и SameSite.
  3. Безопасностьстрока 8
    Health-check раскрывает версию Python и все переменные окружения, включая пароли и ключи.
  4. Безопасностьстрока 11
    debug=True на внешнем интерфейсе: отладчик Werkzeug позволяет выполнить код на сервере. На проде отладка выключена, запуск через WSGI-сервер.

Разбор

Классическая Security Misconfiguration: настройки для разработки уехали в прод. Защита: разные конфиги для окружений, секреты вне кода, проверка конфигурации в CI.

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

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