obj_checks.extract_obj_checks: bool() на строковом флаге → 'false'/'0'/'нет' трактуется как пройдено #1613

Closed
opened 2026-06-16 17:19:52 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: parsing / truthiness · Файл: backend/app/services/scrapers/obj_checks.py:109, 113, 116, 132, 135

Файл: backend/app/services/scrapers/obj_checks.py:109, 113, 132.

passed выводится через bool(value)/bool(data[ct])/bool(passed_raw). Поскольку bool() любой непустой строки = True, строковые значения 'false'/'0'/'нет'/'N' (которые реальный непроверенный JSON стороннего API вполне может прислать) дают passed=True — проваленная проверка сохраняется как пройденная в domrf_obj_checks. Docstring модуля сам признаёт, что схема payload не верифицирована (obj_checks.py:11: 'URL not verified via devtools'), так что строковые флаги — реалистичный сценарий.

Импакт: порча данных в карточке ЖК (тот же консьюмер-путь analytics_queries.py:1071 → API/v1/analytics.py:191). Дормантно — callsite отключён (domrf_kn.py:33-35), активируется при re-enable endpoint.

Фикс: при включении endpoint распарсить реальную схему через devtools и приводить флаги явно (truthy-set {'true','1','y','да'} / falsey-set {'false','0','n','нет'}), а не через bool() на сырой строке.

Почему баг: bool() непустой строки = True, поэтому 'false'/'0'/'нет' → passed=True — проваленная проверка сохраняется как пройденная. Docstring сам признаёт, что схема payload не верифицирована ('URL not verified via devtools'), так что строковые флаги реальны. Дормантно сейчас (callsite закомментирован), но активируется при включении endpoint.

Как чинить: Нормализовать: трактовать '', '0', 'false', 'no', 'нет', 'n' и 0/None как False; либо парсить строго bool/int и логировать неожиданный тип, а не слепой bool().


deep-audit backend v2 (после PR #1543) · verify+harden, confidence 0.82 · unit B35

**Severity:** low · **Категория:** parsing / truthiness · **Файл:** `backend/app/services/scrapers/obj_checks.py:109, 113, 116, 132, 135` Файл: backend/app/services/scrapers/obj_checks.py:109, 113, 132. passed выводится через bool(value)/bool(data[ct])/bool(passed_raw). Поскольку bool() любой непустой строки = True, строковые значения 'false'/'0'/'нет'/'N' (которые реальный непроверенный JSON стороннего API вполне может прислать) дают passed=True — проваленная проверка сохраняется как пройденная в domrf_obj_checks. Docstring модуля сам признаёт, что схема payload не верифицирована (obj_checks.py:11: 'URL not verified via devtools'), так что строковые флаги — реалистичный сценарий. Импакт: порча данных в карточке ЖК (тот же консьюмер-путь analytics_queries.py:1071 → API/v1/analytics.py:191). Дормантно — callsite отключён (domrf_kn.py:33-35), активируется при re-enable endpoint. Фикс: при включении endpoint распарсить реальную схему через devtools и приводить флаги явно (truthy-set {'true','1','y','да'} / falsey-set {'false','0','n','нет'}), а не через bool() на сырой строке. **Почему баг:** bool() непустой строки = True, поэтому 'false'/'0'/'нет' → passed=True — проваленная проверка сохраняется как пройденная. Docstring сам признаёт, что схема payload не верифицирована ('URL not verified via devtools'), так что строковые флаги реальны. Дормантно сейчас (callsite закомментирован), но активируется при включении endpoint. **Как чинить:** Нормализовать: трактовать '', '0', 'false', 'no', 'нет', 'n' и 0/None как False; либо парсить строго bool/int и логировать неожиданный тип, а не слепой bool(). --- <sub>deep-audit backend v2 (после PR #1543) · verify+harden, confidence 0.82 · unit B35</sub>
bot-backend added the
week ревью 1
label 2026-06-16 17:19:52 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1613
No description provided.