This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Производство редакционных партий
|
||||
|
||||
На 31 июля 2026 года строгий аудит проходит 100 из 358 созданных материалов. Остальные 258 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
На 31 июля 2026 года строгий аудит проходит 103 из 358 созданных материалов. Остальные 255 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
|
||||
## Одна партия
|
||||
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
# Автономное тройное ревью П33 · ноябрь 2020 · «Минимальная защита веб-приложения»
|
||||
|
||||
Статус: **принят независимым редактором в выпусковой набор**. В module ровно
|
||||
три revision для стабильных slug:
|
||||
|
||||
- <code>editorial-2020-11-practice-security-baseline</code>;
|
||||
- <code>editorial-2020-11-mechanism-security-baseline</code>;
|
||||
- <code>editorial-2020-11-field-security-baseline</code>.
|
||||
|
||||
Созданы только пять разрешённых файлов П33:
|
||||
|
||||
- <code>web/scripts/upgrade-2020-11.mjs</code>;
|
||||
- <code>web/public/assets/editorial/2020/security-baseline-asset-threat-control-2020.svg</code>;
|
||||
- <code>web/public/assets/editorial/2020/security-baseline-request-boundary-2020.svg</code>;
|
||||
- <code>web/public/assets/editorial/2020/security-baseline-diagnosis-2020.svg</code>;
|
||||
- этот документ.
|
||||
|
||||
Module export не задаёт <code>date</code> или <code>author</code>. Он не
|
||||
подключает registry и не меняет базовый архив. <code>articles.json</code>,
|
||||
редакционный стандарт, очередь, package config, Git и чужие незакоммиченные
|
||||
файлы данным пакетом не изменялись.
|
||||
|
||||
## Проход 1. Факты и техника — пройдено
|
||||
|
||||
| Утверждение | Первичный или официальный источник | Проверенная граница |
|
||||
| --- | --- | --- |
|
||||
| Для исторической статьи нужен конкретный, а не «последний» ASVS | [OWASP ASVS 4.0.2 — release, 28 October 2020 UTC](https://github.com/OWASP/ASVS/releases/tag/v4.0.2_release) | Текст называет 4.0.2 версией, доступной в ноябре 2020 года; он не использует ASVS 5.x и не объявляет учебный маршрут соответствующим стандарту |
|
||||
| Риск удобно называть понятиями эпохи, но Top 10 не является конфигурацией сервера | [OWASP Top 10:2017](https://owasp.org/www-project-top-ten/2017/) | Материалы используют версию 2017 года для разговора о рисках; active, threat, control и evidence всё равно определены для одного route |
|
||||
| Cookie и Set-Cookie описывают перенос состояния и отдельные атрибуты | [RFC 6265 — HTTP State Management Mechanism, April 2011](https://www.rfc-editor.org/rfc/rfc6265) | <code>Secure</code>, <code>HttpOnly</code> и <code>Path=/admin</code> показаны как transport contract учебной cookie, не как замена permission или CSRF control |
|
||||
| CSP2 передаётся response header и остаётся defence in depth | [W3C CSP Level 2 — Recommendation, 15 December 2016](https://www.w3.org/TR/2016/REC-CSP2-20161215/) | Policy не названа лечением input validation, output encoding или server-side authorisation; applicability директив оставлена вопросом к реальным browser и assets |
|
||||
| Конфигурация header должна сверяться с установленным сервером | [nginx: ngx_http_headers_module / add_header](https://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header) | Фрагмент — учебная форма области <code>/admin/</code>; в нём нет реального upstream, hostname, certificate или утверждения о применённой конфигурации |
|
||||
|
||||
### Техническая граница учебной фикстуры
|
||||
|
||||
<code>runSecurityBaselineFixture()</code> создаёт четыре object request в
|
||||
памяти для origin <code>https://admin.example.test</code>:
|
||||
|
||||
- ожидаемый <code>POST /admin/profile</code> с известной учебной session,
|
||||
origin, CSRF token и <code>profile:write</code>;
|
||||
- тот же маршрут с <code>https://other.example.test</code>;
|
||||
- тот же маршрут с пустым token;
|
||||
- тот же маршрут с <code>profile:read</code>.
|
||||
|
||||
<code>evaluateTrainingStateChange()</code> принимает решение до synthetic
|
||||
update: route, session, origin, token и permission проверяются раздельно.
|
||||
Ожидаемый запрос получает <code>204</code>; три изменённых входа получают
|
||||
<code>403</code>. Отдельно fixture проверяет только presence CSP и Set-Cookie
|
||||
полей в объекте response contract.
|
||||
|
||||
У fixture нет URL fetch, DNS, HTTP parser, browser, cookie jar, nginx,
|
||||
proxy process, TLS, сети, scan, production session или реального token. Она
|
||||
не находит уязвимости и не доказывает delivery header от сервера. Это
|
||||
намеренная граница: fixture охраняет логический contract статьи, а
|
||||
интеграционная проверка должна появиться только на разрешённом стенде.
|
||||
|
||||
Вердикт прохода: **пройден**. Факты привязаны к источникам и версиям,
|
||||
исторический ASVS отделён от текущих редакций, а synthetic модель не выдаётся
|
||||
за security assessment.
|
||||
|
||||
## Проход 2. Редактура, глубина и голос М3 — пройдено
|
||||
|
||||
| Ревизия | Симптом и цена в первых двух абзацах | Главный вопрос | Объём основного текста |
|
||||
| --- | --- | --- | --- |
|
||||
| Практика | Headers и проверка пользователя существуют отдельно; цена — оставить state change без нужного gate и принять success за evidence | Как собрать для одного route матрицу «актив → угроза → control → evidence» | **11 043** знака body |
|
||||
| Механизм | Набор cookie flags и CSP не показывает, где request должен остановиться; цена — перепутать session, form context, permission и response policy | Почему baseline — это несколько границ запроса, а не список headers | **10 860** знаков body |
|
||||
| Полевой разбор | Checklist утверждает «защита включена», но не называет request; цена — потерять token, permission или response contract после правки | Как получить воспроизводимое evidence без scan и без claims о production | **10 223** знака body |
|
||||
|
||||
- У каждой revision есть problem и цена в двух первых абзацах, затем
|
||||
последовательность «симптом → причина → проверка → действие».
|
||||
- В каждом тексте больше пяти тематических разделов, одна figure с
|
||||
самостоятельными <code>alt</code>/<code>figcaption</code>, table с
|
||||
<code>caption</code>/<code>thead</code>, HTTP/config/code/fixture example,
|
||||
нумерованный маршрут и пять официальных ссылок.
|
||||
- Автор ноября 2020 года систематизирует безопасность вокруг одного маршрута,
|
||||
но не говорит голосом современного AppSec/SRE-лида: нет claim о complete
|
||||
coverage, pentest, zero-trust platform, CVE scan, dashboard или зрелой
|
||||
программе compliance.
|
||||
- Термины session, CSRF token, permission, CSP и evidence привязаны к
|
||||
request/response contract. Нет общих фраз о «защите сайта вообще» и нет
|
||||
обещания, что один header закрывает XSS, CSRF или authorisation.
|
||||
- Обновлённые titles и excerpts обещают ровно ограниченный результат:
|
||||
учебный маршрут и evidence controls, а не универсальную hardening recipe.
|
||||
|
||||
Второй проход отдельно проверил потенциальные анахронизмы. В источниках
|
||||
зафиксированы ASVS 4.0.2 (октябрь 2020), Top 10:2017, RFC 6265 (2011) и CSP2
|
||||
(2016). Современные редакции OWASP и современный security stack не
|
||||
использованы как будто были практикой автора в 2020 году.
|
||||
|
||||
Вердикт прохода: **пройден**. Тексты укладываются в диапазон 5 000–15 000
|
||||
знаков, остаются технически плотными и постепенно расширяют автора от
|
||||
frontend/delivery инженерии к базовой систематизации безопасности.
|
||||
|
||||
## Проход 3. Визуал, fixture и выпусковой preflight — пройдено в пределах пакета
|
||||
|
||||
- <code>security-baseline-asset-threat-control-2020.svg</code> — вертикальная
|
||||
матрица трёх учебных активов: изменение профиля, session и разметка. У
|
||||
каждого есть threat, control и отдельное evidence.
|
||||
- <code>security-baseline-request-boundary-2020.svg</code> — вертикальный путь
|
||||
request: HTML form → proxy contract → session → form context → permission →
|
||||
response/evidence. Он явно отделяет <code>401</code> от <code>403</code>.
|
||||
- <code>security-baseline-diagnosis-2020.svg</code> — четыре карточки
|
||||
«symptom → cause → check → action»: foreign origin, пустой token,
|
||||
недостаточное permission и неполный response contract.
|
||||
- У SVG есть <code>title</code>, <code>desc</code>, <code>role="img"</code>,
|
||||
вертикальные viewBox, контрастные карточки и короткие строки. В assets нет
|
||||
JavaScript, <code>foreignObject</code>, external URL или raster data URI.
|
||||
- Static mobile preflight отрендерил все три SVG через Sharp до ширины
|
||||
375 px: **375×796**, **375×740** и **375×781**. Визуально проверены
|
||||
заголовки, отсутствие clipping, наложений и горизонтального overflow
|
||||
внутри схем. Это проверка static SVG asset, не browser-run и не проверка
|
||||
screen reader.
|
||||
|
||||
### Фактически выполненные проверки
|
||||
|
||||
После финальной редакторской правки выполнены:
|
||||
|
||||
<pre><code>cd web && node --check scripts/upgrade-2020-11.mjs
|
||||
cd web && npm run audit:draft -- scripts/upgrade-2020-11.mjs
|
||||
cd web && node scripts/upgrade-2020-11.mjs --verify-fixture
|
||||
cd web && xmllint --noout \
|
||||
public/assets/editorial/2020/security-baseline-asset-threat-control-2020.svg \
|
||||
public/assets/editorial/2020/security-baseline-request-boundary-2020.svg \
|
||||
public/assets/editorial/2020/security-baseline-diagnosis-2020.svg</code></pre>
|
||||
|
||||
| Проверка | Реальный результат |
|
||||
| --- | --- |
|
||||
| <code>node --check</code> | PASS, code 0 |
|
||||
| Import-safe export и draft gate | PASS: **11 043 / 10 860 / 10 223** знаков body; три slug, tables, figures, code, routes, sources и assets найдены |
|
||||
| In-memory fixture | PASS: expected request принят; foreign origin, пустой token и <code>profile:read</code> отклонены; CSP и Set-Cookie contract присутствуют |
|
||||
| <code>xmllint --noout</code> | PASS, все три SVG — корректный XML |
|
||||
| Sharp mobile preflight | PASS: три PNG шириной 375 px просмотрены; clipping, наложений и horizontal overflow внутри SVG не обнаружено |
|
||||
| Scope/self-review | PASS: revision не содержит <code>date</code>/<code>author</code>; созданы только пять файлов П33; registry, archive, standard, queue, package config, Git, illustrations и чужие незакоммиченные файлы не редактировались |
|
||||
|
||||
## Независимая интеграционная приёмка
|
||||
|
||||
Основной редактор 31 июля 2026 года подключил три revision к
|
||||
<code>web/data/editorial-revisions.mjs</code>, не меняя базовый
|
||||
<code>articles.json</code>, даты или автора архивных записей. В registry стало
|
||||
94 revision. Перед приёмкой независимо сверена дата ASVS 4.0.2 по API release:
|
||||
<code>published_at = 2020-10-28T22:06:31Z</code>. В тексте и источнике
|
||||
исправлено ошибочное «27 октября» на «28 октября 2020 UTC»; вывод о
|
||||
доступности версии в ноябре не изменился.
|
||||
|
||||
| Проверка после интеграции | Реальный результат |
|
||||
| --- | --- |
|
||||
| Строгий audit трёх slug | PASS: 11 043 / 10 860 / 10 223 знаков; у каждой статьи есть figure, table и code examples |
|
||||
| Production build | PASS: Next.js собрал 374 статические страницы |
|
||||
| Независимый mobile visual review | PASS: основной редактор повторно просмотрел три SVG после Sharp-рендера в 375 px; clipping, overlap и overflow не обнаружены |
|
||||
|
||||
Ни этот отчёт, ни интеграция не утверждают запуск web server, HTTP,
|
||||
browser, scanner, реальный токен, cookie jar или security assessment.
|
||||
|
||||
Выпусковой вердикт: **ACCEPT**. Commit и push выполняются отдельной
|
||||
публикационной операцией; Git остаётся источником её фактической записи.
|
||||
Reference in New Issue
Block a user