Files
huncode 6e664b3ca6
Build and deploy / deploy (push) Successful in 17s
revise February 2023 session articles
2026-07-31 14:34:09 +03:00

11 KiB
Raw Permalink Blame History

П60 · 2023-02 · Аутентификация и сессии — три независимых self-review

Рамка партии

  • Slug: editorial-2023-02-practice-sessions-auth, editorial-2023-02-mechanism-sessions-auth, editorial-2023-02-field-sessions-auth.
  • Голос: М6, февраль 2023. Системный практик называет владельца состояния, цену ошибки, условие отказа и отдельный способ проверки; без выдуманных инцидентов, метрик и опыта эксплуатации.
  • Общая модель: browser cookie переносит непрозрачный ID; server record и lineage pointer решают, какой ID current. Rotation переводит predecessor в rotated; logout-current переводит current record в revoked и возвращает clear cookie. Другой scope (logout-lineage, logout-all) намеренно не подменяется этим правилом.
  • Граница: sidecar не делает HTTP, browser storage/network trace, browser cookie-jar, криптографию, random ID, clock, базу, конкурентный доступ, authz, CSRF или production проверку. Все ID, время и cookie policy заданы в памяти; fixture-s-* не являются образцом production secret.
  • Созданы ровно пять файлов этой партии: этот review, web/scripts/upgrade-2023-02.mjs и три SVG с префиксом sessions-auth-2023-. Registry, README, articles.json, очередь, Git, существующие материалы и чужие untracked-файлы не менялись.

Проход 1 — факты и модель

Статья Главный тезис Первичные или официальные источники Ограничение модели Fixture
editorial-2023-02-practice-sessions-auth Cookie — носитель ID, а server record — источник валидности; rotation и logout меняют оба слоя по одному контракту. IETF RFC 6265 (04.2011); IETF draft-ietf-httpbis-rfc6265bis-11 (07.11.2022, work in progress); NIST SP 800-63B (06.2017, updates through 02.03.2020). Нет браузера, сети, таймера, crypto, secret store и гонок. да
editorial-2023-02-mechanism-sessions-auth Secure, HttpOnly, SameSite, Path и __Host- задают узкий scope доставки; server status/current остаются отдельной проверкой. Те же три датированных первичных/официальных документа. Flags не доказывают authz, CSRF-защиту, реальный TTL или browser compatibility. да
editorial-2023-02-field-sessions-auth Для stale ID надо различать unknown, rotated и revoked, а logout scope назвать до изменения endpoint. Те же три датированных первичных/официальных документа. Нет incident/browser trace, production HTTP response или данных о конкретном сервисе. да
  • Фактологические оговорки сверены с официальными страницами: RFC 6265 — Standards Track от апреля 2011; draft-11 опубликован 7 ноября 2022 и везде назван work in progress, а не финальным RFC; PDF NIST SP 800-63B датирован июнем 2017 с обновлениями до 2 марта 2020. Все источники существовали не позднее 2023-02.
  • createTeachingSessionState() создаёт один active record, а rotateTeachingSession() принимает только current ID, переводит predecessor в rotated, создаёт successor и двигает pointer lineage. Fixture проверяет 15 invariants, включая отсутствие fixture-s-3 после stale rotation и сохранение fixture-s-2 active после stale logout.
  • logoutTeachingSession() в выбранной политике принимает только current active ID, revoke-ит server record, удаляет pointer и создаёт clear cookie той же формы с Expires в прошлом. Stale logout старого ID не заявлен как универсальное правило: статьи явно отделяют logout-current от logout-lineage и logout-all.
  • Не заявлены browser trace, запуск endpoint, настоящая конкуренция, эффект в production, измерение, инцидент или безопасность конкретной системы. Код и текст прямо ограничивают in-memory fixture.

Вердикт: пройти. Источники, статусы документов, переходы модели и границы утверждений совпадают.

Проход 2 — язык, полнота и объём

Статья Знаки основного текста по audit:draft Проблема и цена в первых 2 абзацах Артефакты Голос и анахронизмы
editorial-2023-02-practice-sessions-auth 8 903 да таблица, JS fixture, lifecycle SVG, ordered route, ограничения, 3 источника М6: контракт state/cookie, без метрик и выдуманного опыта
editorial-2023-02-mechanism-sessions-auth 8 547 да таблица слоёв, JS example, cookie-contract SVG, ordered route, ограничения, 3 источника М6: условия и границы flags, draft назван draft
editorial-2023-02-field-sessions-auth 8 158 да диагностическая таблица, JS fixture, stale-events SVG, ordered route, ограничения, 3 источника М6: не выдана гипотеза о вкладках за trace
  • Все три текста находятся в требуемом узком диапазоне 8–10 тыс. знаков основного текста и в общем стандарте 5–15 тыс.; источники не учитываются в объёме.
  • В каждой статье есть упорядоченный маршрут «симптом → причина → проверка → действие», а также отдельный шаг отката, который не оживляет stale ID.
  • Каждый обязательный артефакт присутствует: доступная таблица, воспроизводимый фрагмент/fixture, содержательная figure с alt и caption, ограничения модели и минимум две ссылки на первичные/официальные источники.
  • Удалены общие оценки и шаблонные обороты. Термины current, lineage, stale, rotation привязаны к полям и переходам, а __Host-, Secure, HttpOnly, SameSite и Path объяснены через конкретную область действия и то, что они не решают.

Вердикт: пройти. Тон соответствует системному практику 2022–2024: короткая прагматичная техническая речь, проверяемый следующий шаг и честные ограничения.

Проход 3 — SVG, безопасность и выпуск

Asset Назначение alt и caption XML и safety scan Sharp 375 px
sessions-auth-2023-lifecycle.svg active → rotated → successor → revoked lifecycle да PASS PASS, 375×238
sessions-auth-2023-cookie-contract.svg browser delivery против server validation да PASS PASS, 375×238
sessions-auth-2023-stale-events.svg stale rotation/logout не меняют successor да PASS PASS, 375×238; заголовок сокращён после первого просмотра, обрезания нет
  • node --check web/scripts/upgrade-2023-02.mjs — PASS.
  • node web/scripts/upgrade-2023-02.mjs --verify-fixture — PASS, 15/15 assertions.
  • cd web && npm run audit:draft -- scripts/upgrade-2023-02.mjs — PASS для всех трёх slug. npm вывел три предупреждения о существующих unsupported user config, но аудит завершился успешно.
  • Import-safe export — PASS: ровно 3 revisions, у каждой отсутствуют поля date и author.
  • xmllint --noout — PASS для всех SVG. Safety scan не нашёл script, foreignObject, event attributes, href, javascript:, data: или <image>.
  • Sharp отрендерил все SVG на ширине 375 px; выполнен ручной просмотр PNG. В SVG нет внешних URL, интерактивного поведения, пользовательского ввода или raster content.

Вердикт: пройти. Проверки подтверждают только sidecar-пакет и статические visual assets; публикация, registry update, production build, commit и push не выполнялись.

Интеграционная приёмка

  • Основной редактор заменил учебное удаление cookie с Max-Age=0 на Expires в прошлом: это соответствует примеру RFC 6265 для удаления и не выдаёт спорную производительскую форму за универсальный шаблон. Fixture после изменения — PASS 15/15.
  • Ревизии добавлены в web/data/editorial-revisions.mjs поверх трёх исходных slug. web/data/articles.json, даты и авторы не изменялись; в registry 178 уникальных ревизий без дубликатов.
  • Строгий аудит npm run audit:articles -- editorial-2023-02-practice-sessions-auth editorial-2023-02-mechanism-sessions-auth editorial-2023-02-field-sessions-auth — PASS: у каждой статьи 1 figure, 1 table и 1 code example.
  • Production-сборка cd web && npm run build — PASS: 374 статические страницы. README обновлён с 184/358 до 187/358 принятых материалов; осталось 171.

Итог

Статус: готово к отдельному коммиту.

Изменения после self-review: уменьшен основной текст до 8–10 тыс. знаков; после Sharp-проверки сокращены title/subtitle третьей SVG, чтобы они не обрезались на 375 px.