Защитная диагностика Auth.js: порядок Unicode-нормализации email по GHSA-7RQJ-J65F-68WH: применимость, изолированный тест, измеримый verdict, критерий остановки и пакет данных для владельца системы.
Короткий ответ и применимость — Auth.js: порядок Unicode-нормализации email
Проверяемая задача: проверить, что email нормализуется до синтаксической проверки и сопоставления аккаунта. Сначала подтвердите фактически загруженный компонент Auth.js, его runtime digest, затронутый entry point и границу версий «@auth/core >= 0.1.0, fixed 0.41.3; next-auth >= 4.10.3, fixed 4.24.15; next-auth >= 5.0.0-beta.1, fixed 5.0.0-beta.32». Только после inventory выполняется ограниченный regression: Прогнать pure normalizer с ASCII control и synthetic Unicode separators; mailer и account lookup заменить recorders Пользовательская боль конкретна: Unicode homoglyph может пройти раннюю проверку и после нормализации превратиться в иной адрес. Результат оформляется как таблица raw code points / normalized value / syntax verdict / lookup key / mail calls. GHSA GHSA-7RQJ-J65F-68WH — ориентир для проверки, но не доказательство состояния вашей установки, инцидента или эксплуатации.
Граница данных и решения — Auth.js: порядок Unicode-нормализации email
Разложите этот путь на источник данных, нормализованное представление, policy verdict и side effect. Специальная инварианта: Validate, canonicalize и lookup используют одно финальное normalized value, а неоднозначный адрес отклоняется до side effects. Для каждого перехода укажите владельца решения, ожидаемое состояние и запрещённый результат. NOT_APPLICABLE возможен только при доказанном отсутствии Auth.js или соответствующей функции. Неизвестная версия, digest либо конфигурация означает UNKNOWN, а не безопасность; номер исправленного релиза не заменяет runtime readback.
Изолированный стенд — Auth.js: порядок Unicode-нормализации email
Используйте disposable temp directory, in-memory repository, detached DOM или pure adapter — по типу компонента, но не production. Протокол: Прогнать pure normalizer с ASCII control и synthetic Unicode separators; mailer и account lookup заменить recorders Сеть, shell, database, filesystem, browser, message broker, выдача сессии и другие side effects заменяются spies, recorders или счётчиками. Применяйте короткие synthetic labels; реальные токены, IP, аккаунты, конфиги, логи и пользовательские данные запрещены. Перед control сохраните baseline hash и нулевые counters.
Control и один boundary-case — Auth.js: порядок Unicode-нормализации email
Benign control доказывает достижимость нужной ветки. Boundary-case меняет ровно один структурный признак и обязан остановиться до состояния «Unicode homoglyph может пройти раннюю проверку и после нормализации превратиться в иной адрес». Сохраните таблица raw code points / normalized value / syntax verdict / lookup key / mail calls, reason code, monotonic duration и cleanup state. Проверяемое правило: Validate, canonicalize и lookup используют одно финальное normalized value, а неоднозначный адрес отклоняется до side effects. Не увеличивайте размер, глубину или число повторов после первого нарушения; материал не требует эксплуатационного payload, внешней цели или реального секрета.
Как вынести PASS, FAIL и UNKNOWN — Auth.js: порядок Unicode-нормализации email
PASS требует подтверждённых component digest и entry point, успешного control, соблюдения инварианты «Validate, canonicalize и lookup используют одно финальное normalized value, а неоднозначный адрес отклоняется до side effects», остановки boundary до side effect и доказанного cleanup. FAIL — тот же provenance и наблюдаемый запрещённый call, counter либо state transition. UNKNOWN — нет digest, конфигурации, точки наблюдения, control или восстановления. NOT_APPLICABLE — компонент или функция доказанно отсутствуют. Для воспроизводимости приложите таблица raw code points / normalized value / syntax verdict / lookup key / mail calls; субъективного «выглядит нормально» недостаточно.
Красная линия и восстановление — Auth.js: порядок Unicode-нормализации email
Немедленно остановитесь, если валидатор и lookup увидели разные строки либо неоднозначный адрес дошёл до mail/account lookup. Не повторяйте проверку с более сильным вводом. Верните disposable state к исходному hash, освободите объекты и выполните один benign control. Любой неожиданный ненулевой counter сети, процессов, файлов, записей, маршрутов, браузерной навигации или сессий блокирует PASS и фиксируется отдельно от parser/policy результата. Production, реальные учётные записи и чужие данные в тест не входят.
Почему это самостоятельный intent — Auth.js: порядок Unicode-нормализации email
Делает порядок преобразований наблюдаемым на уровне Unicode code points и lookup key. Самостоятельная identity-normalization проблема, не generic email validation или OAuth verified-email gate. Поэтому механическая замена бренда, ОС или устройства не создаёт ещё один URL. Самостоятельная практическая ценность выражена deliverable «таблица raw code points / normalized value / syntax verdict / lookup key / mail calls» и инвариантой «Validate, canonicalize и lookup используют одно финальное normalized value, а неоднозначный адрес отклоняется до side effects». Если опубликованная страница уже покрывает тот же вопрос, пользовательскую боль и дерево решения, правильное действие — update/merge по отдельному контракту, а не соседняя страница.
Минимальный пакет для владельца — Auth.js: порядок Unicode-нормализации email
Передайте владельцу GHSA GHSA-7RQJ-J65F-68WH, runtime digest, границу «@auth/core >= 0.1.0, fixed 0.41.3; next-auth >= 4.10.3, fixed 4.24.15; next-auth >= 5.0.0-beta.1, fixed 5.0.0-beta.32», entry point, sanitized config, control/boundary rows, counters, verdict, stop reason и cleanup proof. Advisory опубликована 2026-07-23, обновлена 2026-08-12; даты подтверждают свежесть проверенного источника, но не популярность запроса и не состояние конкретной системы. После remediation повторите тот же fixture и сравните state transition без изменения тестового масштаба.
Материал подготовлен редакцией VOne с помощью автоматизированного черновика; даты, версии, границы и ссылки сверены по GitHub Advisory Database и прямому upstream-материалу. Текст самостоятельный, не копирует источник и не содержит эксплуатационных шагов.
Источники и проверка
- GitHub Advisory Database — GHSA-7RQJ-J65F-68WH проверено 2026-09-02
- Первичный upstream материал — Auth.js проверено 2026-09-02
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.