14 KiB
П70 · 2023-12 · Практический аудит веб-проекта — три прохода саморевью
Рамка sidecar-партии
- Slug:
editorial-2023-12-practice-security-audit,editorial-2023-12-mechanism-security-audit,editorial-2023-12-field-security-audit. - Голос: М6, декабрь 2023. Автор действует как системный практик: начинает с конкретного пробела в audit-работе и цены неверного решения, называет границу, evidence и owner, затем оставляет обратимый следующий шаг. Речь короткая и предметная: «симптом → причина → проверка → действие». Нет вымышленного инцидента, скана, риска, coverage, compliance или результата в production.
- Три независимых угла темы: practice собирает scope и карту активов до первого теста; mechanism разделяет evidence, scope и authorization; field строит порядок исправлений из evidence, owner и reversibility, а не из самой громкой severity-метки.
- Граница изменений выдержана: созданы только этот review, import-safe script и три локальных SVG. Не менялись
articles.json, registry, README, очередь, Git, staging, commit, push и любые чужие пути.
Проход 1 — факты, модель и безопасные границы
- Исторический срез проверен 31.07.2026 по первичным или официальным документам, существовавшим до конца декабря 2023: NIST SP 800-115, сентябрь 2008, OWASP Web Security Testing Guide v4.2, 03.12.2020, OWASP ASVS 4.0.3, 28.10.2021, RFC 9116, апрель 2022 и FIRST CVSS v3.1, июнь 2019. Использованы versioned или dated формы, а не последующие правила как будто они уже были известны в 2023 году.
- Формулировки ограничены источниками. NIST описывает planning, test/examination, analysis и mitigation, но это обзор 2008 года, а не готовый современный audit-процесс. WSTG v4.2 даёт версионированные сценарии и mapping архитектуры, но не даёт permission и не доказывает coverage. ASVS 4.0.3 задаёт verification requirements, но не является сертификатом. RFC 9116 определяет disclosure channel и прямо оговаривает отсутствие implied permission to test. CVSS v3.1 описывает Base, Temporal и Environmental groups, но не заменяет контекст, owner, evidence, обратимость или решение конкретной команды.
createSyntheticSecurityAuditPacket()создаёт только fixed marked synthetic audit records в памяти Node. В valid branch ровно один declared boundary record, четыре asset records, четыре evidence cards и три triage cards. Все имена фиксированы и имеютsynthetic-marker. Любой extra top-level field, заявленное real permission, новый asset field, перестановка asset map, raw evidence payload, claimed external confirmation или automatic-change triage отклоняются.- Fixture не сканирует и не брутфорсит, не обращается к URL или сети, не читает проект, код, логи, secrets, environment, Git, CI или часы, не запускает browser и реальные security tests. Ответ явно фиксирует
vulnerability=not-claimed,coverage=not-claimed,compliance=not-claimed,scan=not-performed,bruteForce=not-performed,securityTest=not-run,realPermission=not-grantedиproductionEffect=not-attempted. runSecurityAuditFixture()содержит 23 assertions: valid path проверяет scope, owners, four boundaries, unverified evidence, manual gates, отсутствие реальных claims и отсутствие обращений к данным проекта; отрицательные ветки проверяют не-synthetic input, extra field, claimed permission, asset mutation/reorder/sparse map, raw evidence, claimed confirmation и automatic change; две ветки проверяют узкий rollback. PASS не подтверждает аудит, finding, vulnerability, permission, coverage, compliance или безопасность реального веб-проекта.- Rollback намеренно возвращает только snapshot in-memory draft. Он не удаляет внешние записи, не отменяет deploy, не меняет доступы и не трогает network. В статьях отдельно сказано, что реальный rollback требует владельца, версии изменения, validation criterion и операционного плана в той среде, где действие действительно разрешено.
- В первом проходе найдена модельная недосказанность: третий triage gate требовал validation/rollback plan, но не содержал literal ограничение
before-change. Gate был исправлен наsynthetic-write-validation-and-rollback-plan-before-change; assertion теперь проверяет одинаковое правило для всех трёх маршрутов.
Проход 2 — редактура, голос и объём
- Все три статьи начинают с проблемы и цены. Practice показывает пропущенную boundary и риск затронуть чужую инфраструктуру; mechanism — неподтверждённое утверждение, ошибочно названное finding; field — backlog, который сортируют по громкости score и превращают в неуправляемую правку. Тексты не используют вымышленные метрики, инциденты, пользователей или production-результаты.
- Содержательная разница сохранена. Practice отвечает на «как сузить объект аудита» через asset card, owner и scope; mechanism — «что делает вывод проверяемым и где заканчивается разрешение» через evidence matrix; field — «почему порядок исправлений требует gates» через evidence, exposure, owner и reversibility. Общий fixture — сознательно общий учебный предмет, но каждый текст делает из него другой инженерный вывод.
- В каждой статье есть минимум пять смысловых разделов, доступная таблица, собственный SVG с осмысленными
altи caption, исполнимый fixture, упорядоченный маршрут с буквальной формулой «симптом → причина → проверка → действие», explicit limits, rollback, next step и раздел официальных источников. Запрещённые шаблонные обороты и нераскрытые общие оценки отсутствуют. - Объём основного текста, посчитанный без списка источников: practice — 9 031 знак, mechanism — 8 586 знаков, field — 8 780 знаков. Все тексты находятся в диапазоне 5 000–15 000 и в целевой плотности 8–10 тыс.
readingMinutes: 11, 12 и 12. - Тон соответствует траектории 2022–2024: термин получает соседний объект проверки. Scope привязан к asset/boundary/owner; evidence — к источнику, статусу и limit; CVSS — к характеристике, не к автоматической команде; rollback — к выбранному изменению и валидации. Автор не выдаётся за руководителя платформы и не заявляет, что его модель универсальна.
- Во втором проходе автоматический аудит показал, что у вступления field-статьи в первых 800 знаках не было буквально слова «проблема», хотя цена и предмет были названы. Первое предложение переписано: теперь оно прямо задаёт проблему backlog-а; после исправления audit видит постановку задачи и текст не потерял краткость.
Проход 3 — визуал, автоматические проверки и выпуск
security-audit-2023-scope-map.svgпоказывает только четыре synthetic типа активов и четыре границы; внизу крупно указан запрет трактовать схему как карту сети, перечень URL или permission.security-audit-2023-evidence-matrix.svgотделяет scope, owner/status и next step от permission/finding/compliance.security-audit-2023-remediation-route.svgзавершает каждый путь gate-ом до изменения и отдельно перечёркивает automatic change, scan, brute force, URL/network access и реальные claims.- Во всех SVG есть
title,desc,role="img",aria-labelledby, контрастные цвета, крупные подписи и локальные векторные элементы. Нет<script>,foreignObject, внешних URL,data:image, JavaScript, event handlers, пользовательского ввода или интерактивности. XML валиден; safety scan чистый. - После правок выполнены:
node --check web/scripts/upgrade-2023-12.mjs— PASS;node web/scripts/upgrade-2023-12.mjs --verify-fixture—PASS fixture: 23/23 assertionsпосле независимого model review;cd web && npm run audit:draft -- scripts/upgrade-2023-12.mjs— PASS для всех трёх slug и всех требований quality gate; import-safe comparison CLI/export — PASS, 3 revisions безdate/author, все slug существуют в базовом archive. - Визуалы проверены
xmllint --noout, SVG safety scan и Sharp-render на ширине 375 px. Ручной просмотр подтвердил читаемость заголовков, стрелок, таблицы, legend и ограничений на узком экране. Локальные assets существуют по путям, на которые ссылаются соответствующие revisions. - Партия намеренно не интегрирована: registry, README, overlay, строгий архивный audit, production build, staging и Git остаются обязанностью главного агента на отдельном приёмочном проходе. Этот sidecar не меняет базовые metadata и не делает заявления об опубликованном результате.
Интеграционное ревью главного агента
Независимо сверены первоисточники. NIST SP 800-115 действительно задаёт planning, testing/examination, analysis и mitigation как обзор технической оценки; WSTG v4.2 содержит Testing Framework и Map Application Architecture; RFC 9116 прямо называет отсутствие implied permission to test; CVSS v3.1 разделяет Base, Temporal и Environmental metrics и остаётся входом в management process, а не готовым решением. Эти границы сохранены в тексте.
Model review обнаружил, что Array.prototype.every() пропускает пустой индекс
в разреженном asset array. matchesExpectedRecords() теперь требует все
собственные индексы и ровно ожидаемое число ключей; добавлена отрицательная
ветка sparseAssetMap. Fixture проходит 23/23 assertions, не принимая
неполную карту как валидный scope.
Три SVG прошли XML и safety scan, затем вручную проверены после Sharp-render
на 375 px. Повторный draft audit: 9 031 / 8 586 / 8 780 знаков. Строгий archive
audit прошёл для трёх slug; registry содержит 205 уникальных ревизий. npm run build успешно сгенерировал 374 статические страницы.