public-share: положительная ветка getSharePage (возврат санитизированного контента анонимной модели) без тестов #85

Closed
opened 2026-06-21 02:33:12 +03:00 by Ghost · 0 comments

Найдено в multi-aspect code review всех изменений с коммита 053a9c0d (ветка develop).

Грань: test-coverage / security · Severity: warning
Где: apps/server/src/core/ai-chat/tools/public-share-chat-tools.service.ts:117-154

Проблема
Спека гоняет только негативные ветки getSharePage (вне шары, ограниченный потомок). Положительная ветка — страница принадлежит этой шаре, не удалена, не ограничена, контент возвращается — не исполняется. Именно она security-релевантна: перед отдачей контента анонимной модели обязателен updatePublicAttachments (срез comment-марок, токенизация вложений) и затем jsonToMarkdown. Если санитайзер удалят/переставят, все текущие тесты пройдут (они проверяют, что updatePublicAttachments НЕ вызван), и регрессия с утечкой comment-марок/сырых attachment id уедет в прод.

Предлагаемый фикс
Тест: getShareForPage резолвит THIS-SHARE, findById возвращает живую страницу, hasRestrictedAncestor=false — проверить, что updatePublicAttachments вызван с page и результат {title, markdown}. Второй кейс: findById возвращает soft-deleted страницу — generic-ошибка без фетча контента.

Найдено в multi-aspect code review всех изменений с коммита `053a9c0d` (ветка develop). **Грань:** test-coverage / security · **Severity:** warning **Где:** `apps/server/src/core/ai-chat/tools/public-share-chat-tools.service.ts:117-154` **Проблема** Спека гоняет только негативные ветки getSharePage (вне шары, ограниченный потомок). Положительная ветка — страница принадлежит этой шаре, не удалена, не ограничена, контент возвращается — не исполняется. Именно она security-релевантна: перед отдачей контента анонимной модели обязателен updatePublicAttachments (срез comment-марок, токенизация вложений) и затем jsonToMarkdown. Если санитайзер удалят/переставят, все текущие тесты пройдут (они проверяют, что updatePublicAttachments НЕ вызван), и регрессия с утечкой comment-марок/сырых attachment id уедет в прод. **Предлагаемый фикс** Тест: getShareForPage резолвит THIS-SHARE, findById возвращает живую страницу, hasRestrictedAncestor=false — проверить, что updatePublicAttachments вызван с page и результат {title, markdown}. Второй кейс: findById возвращает soft-deleted страницу — generic-ошибка без фетча контента.
Ghost closed this issue 2026-06-21 14:10:32 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vvzvlad/gitmost#85