Аудит: результаты п.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:
@@ -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,
|
||||
среда готова.
|
||||
|
||||
Reference in New Issue
Block a user