7.2 KiB
П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.