Аудит: результаты п.1 (справка вынесена) и п.2 (garble ломает html/template)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
zuevav
2026-09-18 20:14:37 +03:00
parent fcded5fe17
commit 47f5015c3f
+44
View File
@@ -116,3 +116,47 @@ Go-бинаре — поменять один условный переход;
Пункты 1–2 закрывают то, что находится за минуты. Пункт 3 — то, что нельзя закрыть
технически. Остальное — по мере сил.
---
## Ход работ (18.09, вечер)
### Пункт 1 — вынос справки — СДЕЛАНО (коммит fcded5f)
Технические страницы `/admin/help/*` (архитектура НРД, протокол FTV_M2M на 41 КБ,
база, крипто, QUIK) вынесены за build-tag `internaldocs`. Клиентский релиз
(`build-release.sh`, обычный `go build`) их не содержит — заглушка «доступно на
портале»; наша сборка `go build -tags internaldocs` их включает. Проверено на
собранных бинарях: «Согласовано 10.09», «Для программиста Fancy», «как устроен
обмен» → 0 совпадений в клиентской сборке; −27 тыс. символов внутренней прозы.
Операторские страницы (ручной ввод, робот, системы, API ЛК) остались.
### Пункт 2 — обфускация garble — ПРОВЕРЕНО, НЕ ВНЕДРЕНО (нужен ваш выбор)
Что garble даёт (проверено на реальном bj-server, сборка через go1.26.8):
- имена функций пакета `lkgateway` в бинаре: 72 → **0**;
- SQL-рецепт `OD_RESTS`, `spectreProceeds`, путь `internal/lkgateway/lkflow.go`: → **0**;
- строки `SELECT …`: 128 → **11**; литералы SQL шифруются и расшифровываются
только в момент выполнения — `strings` их больше не выдаёт;
- бинарь запускается, `/healthz` и `/admin/` отвечают 200.
**Но: garble ломает наши HTML-страницы.** `html/template` обращается к полям
структур по имени во время выполнения (`{{$p.AsOf}}`), а garble переименовывает
поля (`AsOf` → случайное) — шаблон падает: «can't evaluate field AsOf». Это
системно: так устроена каждая страница админки и кабинета. Опции «не трогать
имена полей» у garble нет; проблема известная (reflection в html/template
garble не видит, т.к. `Execute` принимает `any`).
Разблокировать garble можно, только передавая в шаблоны данные как
`map[string]any` вместо структур. Это крупная переделка всех обработчиков
страниц и постоянный налог на каждую новую страницу.
**Решение — за вами:**
- **A. Остановиться на пункте 1 + договор (пункт 3).** Самая дешёвая и крупная
утечка (документация) закрыта; в коде остаются SQL-литералы и имена функций,
но чтобы ими воспользоваться, всё равно нужно знание DEPO и НРД, а разбор —
нарушение договора. Рекомендую как базовый вариант.
- **B. Инвестировать в garble.** Перевести данные шаблонов на map (недели работы,
риск регрессий в вёрстке), тогда `strings`/декомпилятор перестают что-либо
давать. Оправдано, если защита кода критична сама по себе.
Тулчейн go1.26.8 и garble установлены в `~/sdk` и `~/go/bin` — если выберете B,
среда готова.