fix: whitelist mode/polygon_stand — защита от мусора в cookie (v1.2.42)
Результат код-ревью #3: mode/polygon_stand принимали любые значения из формы. Добавлена валидация в main.py (set_mode) и auth.py (get_mode, get_polygon_stand): mode ∈ {polygon, cloud}, stand ∈ {dev, test, prod}.
This commit is contained in:
@@ -107,9 +107,13 @@ def index():
|
||||
# Обработка action=set_mode: сохранить режим и стенд в cookie
|
||||
if action == "set_mode":
|
||||
new_mode = request.form.get("mode", "polygon")
|
||||
if new_mode not in ("polygon", "cloud"):
|
||||
new_mode = "polygon"
|
||||
# polygon_stand: из формы, иначе — сохранить предыдущее значение из cookie
|
||||
# (нужно при переключении Облако→Эмуляция — радио стенда нет в DOM)
|
||||
new_stand = request.form.get("polygon_stand") or request.cookies.get("polygon_stand", "test")
|
||||
if new_stand not in ("dev", "test", "prod"):
|
||||
new_stand = "test"
|
||||
resp = make_response(redirect("/"))
|
||||
resp.set_cookie("mode", new_mode, max_age=60*60*24*365, httponly=True, samesite="Strict", secure=True)
|
||||
resp.set_cookie("polygon_stand", new_stand, max_age=60*60*24*365, httponly=True, samesite="Strict", secure=True)
|
||||
|
||||
Reference in New Issue
Block a user