Files
progcode/editorial/reviews/2023-03-draft.md
T
huncode b56f7e94b9
Build and deploy / deploy (push) Successful in 16s
revise March 2023 CSRF CORS articles
2026-07-31 14:38:08 +03:00

7.2 KiB
Raw Blame History

П61 · 2023-03 · CSRF и CORS — self-review

Пакет подготовлен как import-safe replacement для трёх уже существующих slug. В articles.json, registry, README и очереди изменений нет: источником ревизий остаётся web/scripts/upgrade-2023-03.mjs.

1. Факты и модель

Проверка Evidence Вердикт
Origin не подменён словом «сайт» Во всех трёх статьях origin описан как tuple scheme, host, port; fixture отклоняет тот же host с port 8443 и path в поле origin. Основание: RFC 6454, декабрь 2011. PASS
CORS не объявлен CSRF-защитой Текст отделяет доступ JavaScript к response от server-side решения о mutation. W3C CORS Recommendation (16.01.2014) отдельно говорит о simple credentialed request и необходимости CSRF-защиты state-changing resource. PASS
Credentials и wildcard описаны точно Для credentialed response указан exact origin плюс Access-Control-Allow-Credentials: true; * не выдан за допустимый вариант. Это сверено с W3C CORS Recommendation и Fetch snapshot от 24.03.2023. PASS
Preflight не выдан за proof intent Статьи называют его CORS gate для request shape. Контрпримером служит form-shaped POST без custom header: fixture даёт safelisted-shape, но серверный контракт возвращает deny-token. PASS
Fixture не изображает сетевой repro Комментарий, boundary и статьи прямо фиксируют: нет browser, Fetch, сети, cookie jar, OPTIONS и API. Inputs — заданные labels, а не прочитанный trace. node … --verify-fixture прошёл 12/12 assertions. PASS
Источники соответствуют периоду RFC 6454 (2011), W3C CORS Recommendation (2014) и зафиксированный WHATWG Fetch snapshot (24.03.2023) доступны не позднее 2023-03. У каждого указана граница применимости. PASS

Оговорка сохранена в каждой статье: реальный browser/API test с двумя controllable origin и безопасной test session — отдельный артефакт. Его нельзя заменять fixture PASS.

2. Язык, полнота и объём

Slug Основной текст Содержательные требования Вердикт
editorial-2023-03-practice-csrf-cors 9 984 знака проблема и цена в начале; таблица; contract code; figure с alt/caption; маршрут; ограничения; 3 официальных источника PASS
editorial-2023-03-mechanism-csrf-cors 9 944 знака tuple origin, credentials, preflight и CSRF разделены; таблица; code; figure; маршрут; историческая оговорка PASS
editorial-2023-03-field-csrf-cors 9 991 знак диагностика по evidence; таблица «симптом → причина → проверка → действие»; fixture command; figure; ограничения и критерий готовности PASS

Проверен голос М6 для 2023 года: короткая практичная речь, видимые владельцы решений, отрицательные ветки и ограничения рядом с решением. Нет заявлений о выдуманных инцидентах, метриках или результатах команды. audit:draft также не нашёл шаблонных оборотов, следов генерации, пропущенных таблиц, code example, figure, источников или ранней постановки проблемы.

3. SVG, доступность и безопасность

Проверка Результат Вердикт
XML xmllint --noout прошёл для трёх SVG. PASS
SVG safety Нет script, foreignObject, iframe, image, href/external reference, DOCTYPE, ENTITY или inline event handler. У каждого SVG есть уникальные csrf-cors-2023-* title/desc и role="img". PASS
Статейная доступность У трёх <figure> есть предметные alt и caption; audit:draft проверил их наличие. PASS
Sharp 375 px Рендеры: 375×250, 375×250 и 375×263. Первый просмотр показал слишком плотные и частично обрезанные подписи; SVG были упрощены и перенесены. Повторный просмотр: заголовки, ветки и финальные действия помещаются без обрезания. PASS после правки

Команды выпуска

node --check web/scripts/upgrade-2023-03.mjs
PASS

node web/scripts/upgrade-2023-03.mjs --verify-fixture
PASS fixture: 12/12 assertions; in-memory contract only

npm run audit:draft -- scripts/upgrade-2023-03.mjs
PASS editorial-2023-03-practice-csrf-cors: 9984 body chars
PASS editorial-2023-03-mechanism-csrf-cors: 9944 body chars
PASS editorial-2023-03-field-csrf-cors: 9991 body chars

import-safe export
PASS: 3 revisions; date/author absent

xmllint + SVG safety scan + Sharp 375 px render
PASS

npm напечатал три предупреждения о неизвестных пользовательских config (store-dir, cache-dir, public-hoist-pattern); аудит завершился с кодом 0 и к содержимому пакета они не относятся.

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

  • Основной редактор ужесточил canonicalOrigin(): origin label с path, query или hash теперь отклоняется до CORS/CSRF-решений. Новая отрицательная ветка фиксирует, что CORS allow-list не является ограничением по URL-path; fixture — PASS 12/12. Исторический Fetch snapshot дополнительно проверен HTTP 200 с Last-Modified: 24 Mar 2023.
  • Ревизии добавлены в web/data/editorial-revisions.mjs поверх трёх исходных slug. web/data/articles.json, даты и авторы не изменялись; в registry 181 уникальная ревизия без дубликатов.
  • Строгий аудит npm run audit:articles -- editorial-2023-03-practice-csrf-cors editorial-2023-03-mechanism-csrf-cors editorial-2023-03-field-csrf-cors — PASS: у каждой статьи 1 figure, 1 table и 1 code example.
  • Production-сборка cd web && npm run build — PASS: 374 статические страницы. README обновлён с 187/358 до 190/358 принятых материалов; осталось 168.