Перейти к основному содержимому

Безопасность task-bank

Зачем нужно

Task-bank хранит интеллектуальную собственность (задачи, решения, разборы) и критичные для олимпиад материалы. Документ описывает требования безопасности поверх ../../platform/security-baseline.md.

Чувствительные данные

КатегорияЗащита
формулировки задачпубличны после публикации; черновики ограничены
решения и разборыдоступ по task-bank.solutions.read, обычно недоступно ученикам до проверки
ключи проверки (checking_rule)service-only доступ
answer_schemaservice-only доступ
тур олимпиадыдоступ ограничен окном проведения
данные попытокприватны для ученика; преподаватель видит назначенных
teacher notes and rubricsteacher/checker/service scoped
content export snapshotsimmutable after lock; payload allowlist by target
public catalog projectionallowlist-first, without hidden keys/solutions

Доступ к материалам тура

  • задачи тура олимпиады становятся доступны только в окне тура (tour.starts_at / tour.ends_at);
  • доступ к решениям — после публикации результатов;
  • внешние преподаватели получают доступ к работам своих учеников по competition_access_claim.
  • embargoed competition content не должен попадать в storefront или LMS training до разрешённой даты.

Service-to-service

  • task-bank принимает service tokens с scopes:
    • service:task-bank.problems.read;
    • service:task-bank.usage.write;
    • service:task-bank.check.invoke;
    • service:task-bank.activity_templates.read;
    • service:task-bank.program_templates.read;
    • service:task-bank.snapshots.read;
    • service:task-bank.public_projection.read;
  • ответы и схемы проверки доступны только service tokens с явно гранулированными scopes.

Audit

  • публикация задачи / новая версия;
  • изменение checking_rule;
  • доступ к закрытым материалам туров;
  • создание и lock content export snapshot;
  • чтение answer key, rubric, hidden solution или teacher notes;
  • обновление public publication profile;
  • ручная проверка / переоценка попытки;
  • удаление подсказки или решения.

Защита от утечки

  • черновики задач не отдаются по публичным API;
  • public catalog projection не содержит answer key, hidden solution, teacher notes, moderation notes, raw attempts или hidden rubrics;
  • preview-ссылки имеют срок жизни и токен;
  • архив старых туров доступен через ограниченный API с retention 5 лет.
  • locked snapshot не меняется in-place; исправление создаёт новый snapshot and explicit relink.

Rate limits

EndpointЛимит
POST /check60 / min / user
POST /problems (create)60 / min / user
GET /problems/{id}600 / min / user
GET /problem-sets/{id}300 / min / user
GET /public/tasks/{id}600 / min / user
POST /content-export-snapshots/{id}/lock30 / min / service

Защита проверочного ключа

  • checking_rule (формула, ответы, expected) не хранится в plain text для секретных задач;
  • доступ только через сервис проверки, не через прямой API;
  • логирование запросов чтения схем ответов с алертом на необычные паттерны.
  • public and storefront endpoints use explicit field allowlist and cannot request key/checking payload.

Что запрещено

  • публиковать решения в открытом доступе;
  • логировать answer_schema и checking_rule;
  • передавать ответы туров до окончания тура;
  • ручные правки low-level check attempts без task-bank.attempts.manage permission и audit.
  • экспортировать teacher notes, rubrics или hidden answer keys в target, у которого нет explicit scope;
  • использовать public catalog как обход competition embargo;
  • хранить LMS roster, attendance или course progress в task-bank templates.

Связанные документы

Ссылка на draft feature spec ниже — non-canonical detail draft; канонические security rules остаются в этом active-документе, security baseline и permissions matrix.