chore(claude): security hardening — dangerous-commands hook, settings в git, restricted DB, throttle #2150

Merged
lekss361 merged 3 commits from chore/claude-security-hardening into main 2026-07-02 15:23:12 +00:00
Owner

Summary

Реализация 4 из 6 security-пунктов аудита 2026-07-02, явно одобренных user'ом (пункты 1 и 5 — токен-ротация и defaultMode — локальные, вне git):

  • Новый PreToolUse hook check-dangerous-commands.py — regex-скан всей строки команды: ловит --force/--amend/--no-verify/rebase -i/reset --hard/rm -rf/Remove-Item -Recurse -Force/docker volume rm/прямой push в main — включая пейлоады внутри powershell -c "...", которые deny-префиксы не матчат. Анти-FP: содержимое -m "..." вырезается перед матчингом. Протестирован матрицей 35/35 (block/allow/false-positive кейсы).
  • .claude/settings.json снят с .gitignore и закоммичен (секретов нет — перепроверено review'ером построчно): бот-окна и чистые checkout теперь получают hooks/deny/statusLine вместо их молчаливого отсутствия. statusline.py также добавлен (был untracked). settings.local.json и .mcp.json остаются в ignore.
  • Read-deny расширен: Read(**/.env), Read(**/.env.*) — закрывает tradein-mvp и копии в _wt-* worktree'ах.
  • postgres MCP reviewer/qa → --access-mode=restricted — декларируемый read-only теперь enforced.
  • auto-analyst.md: throttle-политика ready≥10 — конфликт с work-as-analyst.md устранён в пользу just-in-time нарезки.
  • defaultMode: auto перенесён на project-уровень (глобально снят — balance_platform вернулся к обычным промптам).

Pre-push review: APPROVE (эмпирическая проверка: 0 секретов в diff, regex ReDoS-safe 0.039s на патологическом входе, JSON валиден, замечания по git -C/main-hotfix исправлены follow-up коммитами).

Test plan

  • Hook: 35/35 тест-кейсов (в т.ч. powershell-обёртки, git -C, false-positive на commit-message)
  • Pre-commit hooks passed на всех 3 коммитах; detect-private-key passed
  • Секрет-скан diff: чисто
  • После merge: убедиться, что свежий worktree получает .claude/settings.json из checkout

Merge одобрен user'ом в сессии («лучший вариант по пунктам выбери и сделай» + подтверждение «да» на план push → PR → merge при зелёном CI).

## Summary Реализация 4 из 6 security-пунктов аудита 2026-07-02, явно одобренных user'ом (пункты 1 и 5 — токен-ротация и defaultMode — локальные, вне git): - **Новый PreToolUse hook `check-dangerous-commands.py`** — regex-скан всей строки команды: ловит `--force`/`--amend`/`--no-verify`/`rebase -i`/`reset --hard`/`rm -rf`/`Remove-Item -Recurse -Force`/`docker volume rm`/прямой push в main — включая пейлоады внутри `powershell -c "..."`, которые deny-префиксы не матчат. Анти-FP: содержимое `-m "..."` вырезается перед матчингом. Протестирован матрицей 35/35 (block/allow/false-positive кейсы). - **`.claude/settings.json` снят с .gitignore и закоммичен** (секретов нет — перепроверено review'ером построчно): бот-окна и чистые checkout теперь получают hooks/deny/statusLine вместо их молчаливого отсутствия. `statusline.py` также добавлен (был untracked). `settings.local.json` и `.mcp.json` остаются в ignore. - **Read-deny расширен**: `Read(**/.env)`, `Read(**/.env.*)` — закрывает tradein-mvp и копии в `_wt-*` worktree'ах. - **postgres MCP reviewer/qa → `--access-mode=restricted`** — декларируемый read-only теперь enforced. - **auto-analyst.md: throttle-политика ready≥10** — конфликт с work-as-analyst.md устранён в пользу just-in-time нарезки. - `defaultMode: auto` перенесён на project-уровень (глобально снят — balance_platform вернулся к обычным промптам). Pre-push review: ✅ APPROVE (эмпирическая проверка: 0 секретов в diff, regex ReDoS-safe 0.039s на патологическом входе, JSON валиден, замечания по `git -C`/`main-hotfix` исправлены follow-up коммитами). ## Test plan - [x] Hook: 35/35 тест-кейсов (в т.ч. powershell-обёртки, `git -C`, false-positive на commit-message) - [x] Pre-commit hooks passed на всех 3 коммитах; detect-private-key passed - [x] Секрет-скан diff: чисто - [ ] После merge: убедиться, что свежий worktree получает `.claude/settings.json` из checkout Merge одобрен user'ом в сессии («лучший вариант по пунктам выбери и сделай» + подтверждение «да» на план push → PR → merge при зелёном CI).
lekss361 added 3 commits 2026-07-02 15:22:35 +00:00
- .claude/settings.json закоммичен (секретов нет): бот-окна и чистые checkout
  получают hooks/deny/statusLine вместо молчаливого их отсутствия
- новый PreToolUse hook check-dangerous-commands.py: ловит force/amend/no-verify/
  rm -rf/reset --hard/push в main И внутри powershell-обёрток (deny-префиксы позиционны);
  24/24 тест-кейсов; + Read-deny **/.env
- postgres MCP reviewer/qa → --access-mode=restricted (декларируемый read-only
  теперь enforced, не проза)
- auto-analyst: принята throttle-политика ready>=10 (конфликт с work-as-analyst устранён,
  just-in-time нарезка)
- defaultMode:auto перенесён на project-уровень (глобально снят — balance_platform
  вернулся к обычным промптам)
fix(claude-hooks): review fixes — git -C variant, main-hotfix false positive, known-bypass docstring
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
4ecb639492
lekss361 merged commit b7d35cfee0 into main 2026-07-02 15:23:12 +00:00
lekss361 deleted branch chore/claude-security-hardening 2026-07-02 15:23:12 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2150
No description provided.