submodule: Opus review fixes + History doc
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# DrHider — ревью Opus'а и исправления (2026-06-29)
|
||||
|
||||
## Контекст
|
||||
DrHider — сервис обфускации документов. Изначально впихнут в convert_server.py (общий сервер сверки договоров). Сервер падал из-за отсутствия БД → 502. Вынесен в standalone drhider_server.py на порту 8767.
|
||||
|
||||
## Найденные баги (Opus)
|
||||
|
||||
### CRITICAL
|
||||
| # | Что | Где | Исправлено |
|
||||
|---|-----|-----|-----------|
|
||||
| C1 | Path traversal: `/static/../etc/passwd` читает любой файл на ВМ | `convert_server.py:_handle_app_js` | ✅ `os.path.realpath` + проверка `startswith(base)` + whitelist `.js`/`.svg` |
|
||||
|
||||
### HIGH
|
||||
| # | Что | Где | Исправлено |
|
||||
|---|-----|-----|-----------|
|
||||
| H1 | Нет лимита размера тела → memory DoS → OOM-kill | `drhider_server.py:_handle_drhider` | ✅ `MAX_BODY = 200MB`, 413 при превышении |
|
||||
| H2 | DrHider дублирован в convert_server.py (БД-зависимом) | `convert_server.py` | ✅ Удалён роут `/api/drhider` и метод `_handle_drhider` |
|
||||
|
||||
### MEDIUM
|
||||
| # | Что | Где | Исправлено |
|
||||
|---|-----|-----|-----------|
|
||||
| M1 | `generate_passport`: `re.match().group(0)` → AttributeError если LLM вернёт не «паспорт» | `drhider.py` | ✅ `m.group(0) if m else ""` |
|
||||
| M2 | Замена по подстроке без границ слова | `drhider.py` | ⬜ отложено |
|
||||
| M3 | Три разных версии: 1.0, 1.2, v1.3 | все файлы | ✅ везде 1.3 |
|
||||
|
||||
### LOW
|
||||
| # | Что | Где | Исправлено |
|
||||
|---|-----|-----|-----------|
|
||||
| L1 | Мусорные импорты: `io as io_mod`, `hashlib`, дубль `import cgi` | все файлы | ✅ удалены |
|
||||
| L2 | `sorted_keys` пересчитывается на каждый абзац docx | `drhider.py` | ⬜ отложено |
|
||||
| L3 | CORS `*` на эндпоинте обфускации | оба сервера | ⬜ отложено |
|
||||
| L4 | Утечка временных файлов в `_handle_convert_doc` | `convert_server.py` | ⬜ отложено |
|
||||
|
||||
## Версии после исправлений
|
||||
- `DRHIDER_VERSION = "1.3"` (drhider.py)
|
||||
- `DRHIDER_SERVER_VERSION = "1.3"` (drhider_server.py)
|
||||
- `v1.3` (drhider.html)
|
||||
|
||||
## Архитектура (после исправлений)
|
||||
- `:8766` — convert_server.py (сверка договоров, с БД или без)
|
||||
- `:8767` — drhider_server.py (только обфускация, БД не нужна)
|
||||
- nginx: `/api/drhider` → `:8767`, остальные `/api/*` → `:8766`
|
||||
- systemd: `contracts.service` + `contracts-drhider.service`
|
||||
+1
-1
Submodule contracts-flask updated: de66eb9b1e...64a45a18bf
Reference in New Issue
Block a user