docs: Opus code review request for DrHider
Deploy contracts-flask / validate (push) Successful in 0s
Deploy contracts-flask / validate (push) Successful in 0s
This commit is contained in:
@@ -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 (полностью)
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user