v0.0.75: кнопка disabled при 0 файлов, фильтр документов в expand_zips, README-риски
Deploy drhider / validate (push) Canceled after 0s
Deploy drhider / validate (push) Canceled after 0s
This commit is contained in:
@@ -106,6 +106,7 @@
|
|||||||
- **2026-08-24-time-tickers-estimates.md** — v0.0.64–0.0.65: тикер текущего файла на всех этапах, мгновенные оценки времени по файлам и суммарно.
|
- **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-select-implemented.md** — v0.0.68: кнопка «Выбрать папку» (webkitdirectory, рекурсивно, относительный путь).
|
||||||
- **2026-08-24-folder-zip-not-lost.md** — v0.0.69: архивы из папки без документов не теряются (добавляются как есть); раскрытие zip с документами; склонение счётчика.
|
- **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-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-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 из ВМ, корректная ошибка лимита сессии, счётчик дедупа.
|
- **2026-08-24-pull-retry-limit-counter.md** — v0.0.72: ретраи pull из ВМ, корректная ошибка лимита сессии, счётчик дедупа.
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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)
|
## Связь с ВМ contracts (legacy)
|
||||||
|
|
||||||
На ВМ `5.172.178.213` (contracts.kube5s.ru) есть старая версия drhider:
|
На ВМ `5.172.178.213` (contracts.kube5s.ru) есть старая версия drhider:
|
||||||
|
|||||||
@@ -336,6 +336,10 @@ def expand_zips(files: List[Tuple[str, bytes, str]]) -> List[Tuple[str, bytes, s
|
|||||||
name = os.path.basename(name)
|
name = os.path.basename(name)
|
||||||
if not name:
|
if not name:
|
||||||
continue
|
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)
|
inner_data = zf.read(info)
|
||||||
total_uncompressed += len(inner_data)
|
total_uncompressed += len(inner_data)
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ if _sys_path_root not in sys.path:
|
|||||||
sys.path.insert(0, _sys_path_root)
|
sys.path.insert(0, _sys_path_root)
|
||||||
|
|
||||||
# Версия приложения (меняется при изменениях)
|
# Версия приложения (меняется при изменениях)
|
||||||
VERSION = "0.0.74"
|
VERSION = "0.0.75"
|
||||||
|
|
||||||
|
|
||||||
def setup_logging():
|
def setup_logging():
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ function resetAll() {
|
|||||||
db.classList.remove('show');
|
db.classList.remove('show');
|
||||||
document.getElementById('statsBlock').classList.remove('show');
|
document.getElementById('statsBlock').classList.remove('show');
|
||||||
document.getElementById('liveBlock').classList.remove('show');
|
document.getElementById('liveBlock').classList.remove('show');
|
||||||
ub.disabled = false;
|
// Кнопку «Обфусцировать» НЕ перекрываем: rr() уже поставил disabled при пустом списке
|
||||||
}
|
}
|
||||||
|
|
||||||
// При F5 / закрытии вкладки — обрубить всё
|
// При F5 / закрытии вкладки — обрубить всё
|
||||||
|
|||||||
Reference in New Issue
Block a user