11 KiB
11 KiB
П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-2active после 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.