К обсуждениям

Django cache: приватный ответ и cookie-вариативность

Редакция VOne Технологии

Защитная диагностика Django cache: приватный ответ и cookie-вариативность по GHSA-3H9F-R86X-QVJX: применимость, изолированный тест, измеримый verdict, критерий остановки и пакет данных для владельца системы.

Короткий ответ и применимость — Django cache: приватный ответ и cookie-вариативность

Проверяемая задача: проверить, что private и cookie-зависимые ответы не переиспользуются между запросами. Сначала подтвердите фактически загруженный компонент Django cache middleware, его runtime digest, затронутый entry point и границу версий «django >= 0; fixed 5.2.16 | django >= 6.0.0; fixed 6.0.7». Только после inventory выполняется ограниченный regression: В in-memory cache выполнить последовательность anonymous и два synthetic principals с разными cookies; view вернуть canary labels. Пользовательская боль конкретна: ответ одному пользователю может попасть в общий cache key из-за несвязанной cookie конфигурации. Результат оформляется как таблица request class / cache key / stored flag / returned canary. GHSA GHSA-3H9F-R86X-QVJX — ориентир для проверки, но не доказательство состояния вашей установки, инцидента или эксплуатации.

Граница данных и решения — Django cache: приватный ответ и cookie-вариативность

Разложите именно этот путь на входное представление, canonical form, policy verdict и side effect. Специальная инварианта: Private/no-store запрещает сохранение, а Vary: Cookie включает релевантное представление в key независимо от случайных cookies. Для каждой границы укажите владельца решения, ожидаемое состояние и запрещённый переход. NOT_APPLICABLE возможен только при доказанном отсутствии Django cache middleware или функции. Неизвестная версия, digest либо конфигурация означает UNKNOWN, а не безопасность; номер исправленного релиза сам по себе не заменяет runtime readback.

Изолированный стенд — Django cache: приватный ответ и cookie-вариативность

Используйте disposable temp directory, in-memory repository, detached DOM или pure adapter — по типу компонента, но никогда production. Протокол стенда: В in-memory cache выполнить последовательность anonymous и два synthetic principals с разными cookies; view вернуть canary labels. Все внешние действия — сеть, shell, database, filesystem, browser, message broker, выдача сессии — заменяются spies, recorders или счётчиками. Применяйте короткие synthetic labels; реальные токены, IP, аккаунты, конфиги, логи и пользовательские данные запрещены. Перед control сохраните baseline hash и нулевые counters.

Control и один boundary-case — Django cache: приватный ответ и cookie-вариативность

Benign control доказывает достижимость нужной ветки. Boundary-case меняет ровно один структурный признак и обязан остановиться до состояния «ответ одному пользователю может попасть в общий cache key из-за несвязанной cookie конфигурации». Сохраните таблица request class / cache key / stored flag / returned canary, reason code, monotonic duration и cleanup state. Проверяемое правило: Private/no-store запрещает сохранение, а Vary: Cookie включает релевантное представление в key независимо от случайных cookies. Не увеличивайте размер, глубину или число повторов после первого нарушения; статья не требует эксплуатационного payload, внешней цели или реального секрета.

Как вынести PASS, FAIL и UNKNOWN — Django cache: приватный ответ и cookie-вариативность

PASS требует подтверждённых component digest и entry point, успешного control, соблюдения инварианты «Private/no-store запрещает сохранение, а Vary: Cookie включает релевантное представление в key независимо от случайных cookies», остановки boundary до side effect и доказанного cleanup. FAIL — тот же provenance и наблюдаемый запрещённый call, counter либо state transition. UNKNOWN — нет digest, конфигурации, точки наблюдения, control или восстановления. NOT_APPLICABLE — компонент или функция доказанно отсутствуют. Для воспроизводимости приложите таблица request class / cache key / stored flag / returned canary; субъективного «выглядит нормально» недостаточно.

Красная линия и восстановление — Django cache: приватный ответ и cookie-вариативность

Немедленно остановитесь, если canary одного principal возвращён другому или private response сохранён. Не повторяйте проверку с более сильным вводом. Верните disposable state к исходному hash, освободите объекты и выполните один benign control. Любой неожиданный ненулевой counter сети, процессов, файлов, записей, маршрутов, браузерной навигации или сессий блокирует PASS и фиксируется отдельно от parser/policy результата. Production, реальные учётные записи и чужие данные в этот тест не входят.

Почему это самостоятельный intent — Django cache: приватный ответ и cookie-вариативность

Проверяет совместно решение о хранении и построение ключа на последовательности запросов. Не cache poisoning контента: самостоятельна утечка приватного response из-за cookie variance middleware. Поэтому механическая замена бренда, ОС или устройства не создаёт ещё один URL. Самостоятельная практическая ценность выражена deliverable «таблица request class / cache key / stored flag / returned canary» и инвариантой «Private/no-store запрещает сохранение, а Vary: Cookie включает релевантное представление в key независимо от случайных cookies». Если опубликованная страница уже покрывает тот же вопрос, пользовательскую боль и дерево решения, правильное действие — update/merge по отдельному контракту, а не соседняя страница.

Минимальный пакет для владельца — Django cache: приватный ответ и cookie-вариативность

Передайте владельцу GHSA GHSA-3H9F-R86X-QVJX, runtime digest, границу «django >= 0; fixed 5.2.16 | django >= 6.0.0; fixed 6.0.7», entry point, sanitized config, control/boundary rows, counters, verdict, stop reason и cleanup proof. Advisory опубликована 2026-07-07, обновлена 2026-08-07; даты подтверждают свежесть проверенного источника, но не популярность запроса и не состояние конкретной системы. После remediation повторите тот же fixture и сравните state transition без изменения тестового масштаба.

Материал подготовлен редакцией VOne с помощью автоматизированного черновика; даты, версии, границы и ссылки сверены по GitHub Advisory Database и прямому upstream-материалу. Текст самостоятельный, не копирует источник и не содержит эксплуатационных шагов.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.