From 6c00ce3cb4fcdb7137a92463f39546857becb860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Mon, 29 Jun 2026 15:17:16 +0400 Subject: [PATCH] docs: Opus code review request for DrHider --- .../opus-drhider-code-review-2026-06-29.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 History/opus-drhider-code-review-2026-06-29.md diff --git a/History/opus-drhider-code-review-2026-06-29.md b/History/opus-drhider-code-review-2026-06-29.md new file mode 100644 index 0000000..a2ead68 --- /dev/null +++ b/History/opus-drhider-code-review-2026-06-29.md @@ -0,0 +1,32 @@ +# Opus — ревью кода DrHider v0.1 + +29.06.2026 + +## Файлы для ревью + +Все в `contracts-flask`: +- `deploy/services/drhider.py` — ядро обфускации +- `site/app.py` — роуты `/DrHider` + `/api/drhider` +- `site/templates/drhider.html` — фронтенд + +## Что делает + +Загрузка .docx/.pdf/.doc/.zip → обфускация чувствительных данных → ZIP с обезличенными файлами + mapping.csv. Без БД, всё в памяти. + +## Ключевые моменты для проверки + +1. **`_expand_zips`**: распаковка вложенных ZIP, cp437→utf-8, path traversal, лимиты 500 файлов/500MB +2. **`_scan_regex`**: regex-паттерны для телефонов/email/ИНН/ОГРН/компаний. Не ловит ли лишнего? (например passport-паттерн матчит числа) +3. **`_apply_replacements`**: замена по сортированным ключам. Не заменит ли подстроку внутри другого слова? +4. **`_replace_in_docx`**: замена в `paragraphs.runs` и `tables`. Что если слово разбито на несколько runs? +5. **`_replace_in_text`**: PDF отдаётся как plain text — теряется форматирование. Нормально для MVP? +6. **Генераторы фиктивных данных**: валидные контрольные суммы ИНН/ОГРН, словари ФИО/городов +7. **Обработка ошибок**: `try/except` в `_expand_zips`, `_scan_llm_ner`. Не глотаются ли ошибки молча? +8. **Безопасность**: удаление tempdir в `finally`, очистка `_mapping`, нет логов с реальными данными +9. **Потенциальные баги**: использовал переменную `inner_name` вместо `name` (уже исправлено). Есть ли ещё такие? + +## Код + +```python +# deploy/services/drhider.py (полностью) +```