From eaa064a7213b6ac5c8cd8e5e159c93863bc34e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Mon, 24 Aug 2026 20:18:44 +0300 Subject: [PATCH] =?UTF-8?q?v0.0.75:=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0?= =?UTF-8?q?=20disabled=20=D0=BF=D1=80=D0=B8=200=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2,=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B2?= =?UTF-8?q?=20expand=5Fzips,=20README-=D1=80=D0=B8=D1=81=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History/README.md | 1 + .../code-fixes/2026-08-24-v075-small-fixes.md | 27 +++++++++++++++++++ README.md | 12 +++++++++ drhider/extractor.py | 4 +++ site/app.py | 2 +- site/templates/index.html | 2 +- 6 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 History/code-fixes/2026-08-24-v075-small-fixes.md diff --git a/History/README.md b/History/README.md index 315db4d..56dd2c2 100644 --- a/History/README.md +++ b/History/README.md @@ -106,6 +106,7 @@ - **2026-08-24-time-tickers-estimates.md** — v0.0.64–0.0.65: тикер текущего файла на всех этапах, мгновенные оценки времени по файлам и суммарно. - **2026-08-24-folder-select-implemented.md** — v0.0.68: кнопка «Выбрать папку» (webkitdirectory, рекурсивно, относительный путь). - **2026-08-24-folder-zip-not-lost.md** — v0.0.69: архивы из папки без документов не теряются (добавляются как есть); раскрытие zip с документами; склонение счётчика. +- **2026-08-24-v075-small-fixes.md** — v0.0.75: кнопка при 0 файлов, фильтр zip (idx-мисматч), README-риски; замечен закоммиченный LLM_API_KEY. - **2026-08-24-v074-cancel-extract.md** — v0.0.74: отмена в extract-фазе (не ждём все .doc). - **2026-08-24-v073-security-fixes.md** — v0.0.73: 6 фиксов по ревью Соннета (SSRF, path traversal, слабый SID, proc_error, zip-бомба, self-XSS); 1 отклонено (cleanup), 5 отложено. - **2026-08-24-pull-retry-limit-counter.md** — v0.0.72: ретраи pull из ВМ, корректная ошибка лимита сессии, счётчик дедупа. diff --git a/History/code-fixes/2026-08-24-v075-small-fixes.md b/History/code-fixes/2026-08-24-v075-small-fixes.md new file mode 100644 index 0000000..aafa73f --- /dev/null +++ b/History/code-fixes/2026-08-24-v075-small-fixes.md @@ -0,0 +1,27 @@ +# v0.0.75 — кнопка при 0 файлов, фильтр zip, README-риски (2026-08-24) + +_code-fixes. Закрытие отложенных пунктов списка «что далее»._ + +## Что сделано +1. **Кнопка «Обфусцировать» активна при 0 файлов** (`index.html::resetAll`) — + убрано перекрытие `ub.disabled = false` после `rr()` (rr() уже ставит disabled при пустом списке). + Из TODO (`docs/WhatTODO.md`, пункт 1). +2. **idx-мисматч `expand_zips`** (`drhider/extractor.py`) — синхронизирован фильтр расширений + с фронтом `listZipFiles`: из zip берутся ТОЛЬКО документы (`.pdf .doc .docx .txt .md`) + и вложенные `.zip`. Unit-тест: zip [txt,pdf,xlsx,ini] → раскрыты только txt,pdf. +3. **README** — добавлена секция «Известные ограничения / риски»: LLM prompt injection, + кейс «zip без документов». + +## Не сделано (решение) +- **`session_files` оставлен** — используется для диагностики (тесты), + SID теперь 128-бит (не угадывается), риск мал. + +## ⚠️ Замечено (требует решения) +- В `README.md` в открытом виде закоммичен `LLM_API_KEY` (секрет!). Желательно вынести + в переменные окружения Штурвала и убрать из README. + +## Проверка +- `py_compile` (app.py, extractor.py) — OK; `node --check` — OK. +- `expand_zips` unit-тест — OK (только документы). +- `resetAll` больше не содержит `ub.disabled = false` (5 оставшихся мест — нужные ветки). +- Версия 0.0.74 → 0.0.75. diff --git a/README.md b/README.md index f2c0fcc..fc437db 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,18 @@ git add -A && git commit -m "подробное описание" && git push --- +## Известные ограничения / риски + +- **LLM prompt injection**: текст документа вставляется в LLM-промпт дословно; вредоносный + документ может содержать инструкции, подавляющие обнаружение персональных данных. + Итог — неполная обфускация без явной ошибки. Известный класс риска (не фикс кода), + обнаружен при код-ревью (2026-08-24, `History/sonnet/2026-08-24-code-review-sonnet.md`). +- **ZIP без документов**: фронт добавляет такой ZIP в список как есть (v0.0.69), бэк + раскрывает из него только документы (фильтр расширений, v0.0.75); файлы без документов + в результат не попадают. + +--- + ## Связь с ВМ contracts (legacy) На ВМ `5.172.178.213` (contracts.kube5s.ru) есть старая версия drhider: diff --git a/drhider/extractor.py b/drhider/extractor.py index 8305ca2..cfe20ca 100644 --- a/drhider/extractor.py +++ b/drhider/extractor.py @@ -336,6 +336,10 @@ def expand_zips(files: List[Tuple[str, bytes, str]]) -> List[Tuple[str, bytes, s name = os.path.basename(name) if not name: continue + # Синхронизация с фронтом (listZipFiles): из zip берём ТОЛЬКО документы + low = name.lower() + if not (low.endswith('.zip') or low.endswith(('.pdf', '.doc', '.docx', '.txt', '.md'))): + continue inner_data = zf.read(info) total_uncompressed += len(inner_data) diff --git a/site/app.py b/site/app.py index c1b5d9f..41a20cf 100644 --- a/site/app.py +++ b/site/app.py @@ -21,7 +21,7 @@ if _sys_path_root not in sys.path: sys.path.insert(0, _sys_path_root) # Версия приложения (меняется при изменениях) -VERSION = "0.0.74" +VERSION = "0.0.75" def setup_logging(): diff --git a/site/templates/index.html b/site/templates/index.html index 355bc98..a813aeb 100644 --- a/site/templates/index.html +++ b/site/templates/index.html @@ -264,7 +264,7 @@ function resetAll() { db.classList.remove('show'); document.getElementById('statsBlock').classList.remove('show'); document.getElementById('liveBlock').classList.remove('show'); - ub.disabled = false; + // Кнопку «Обфусцировать» НЕ перекрываем: rr() уже поставил disabled при пустом списке } // При F5 / закрытии вкладки — обрубить всё