Ресурсы · 116

postMessage: проверять источник, окно и команду

Задайте контракт сообщений iframe или всплывающего окна, отклоняющий неожиданных отправителей и данные.

Обновлено · 2 min

Чего помогает достичь это руководство

  • Описать участников и типы
  • Проверить до любого действия
  • Проверить навигацию и неожиданные сообщения

Быстрая проверка

  • Контракт origin, окна, типа и минимальных данных.
  • Цепочка проверки и отказ без бизнес-эффекта.
  • Матрица отказов и очистка обработчиков.

Пошаговый метод

  1. 1

    Описать участников и типы

    Перечислите точные origin, ожидаемую ссылку на окно и типы сообщений. Для чувствительных данных задайте точный targetOrigin. Origin включает протокол, хост и порт; поиск подстроки в домене не проверяет отправителя.

    Контракт origin, окна, типа и минимальных данных.

  2. 2

    Проверить до любого действия

    Сравните event.origin и для этой интеграции event.source с ожидаемым окном. Проверьте схему, допустимые значения и состояние операции. Обрабатывайте содержимое как данные без eval и вставки HTML. Разрешённый origin не заменяет авторизацию на сервере.

    Цепочка проверки и отказ без бизнес-эффекта.

  3. 3

    Проверить навигацию и неожиданные сообщения

    Испытайте похожий домен, другой порт, другое окно того же origin, неверные поля и сообщения после закрытия. Удаляйте ненужные обработчики и завершайте обмены. Ответы направляйте только на заранее разрешённый origin даже после навигации.

    Матрица отказов и очистка обработчиков.

Воспроизводимый приёмочный случай

Вымышленный пример: данные не описывают клиента или наблюдаемый результат.

Посмотреть данные случая
{
    "allowed_origin": "https://widget.example",
    "observed_origin": "https://widget.example",
    "expected_window": "active_iframe",
    "observed_window": "another_window",
    "payload_schema_valid": true,
    "expected": "reject_without_effect"
}

Ожидаемое решение

Вымышленный пример: https://widget.example разрешён, но event.source — другое окно. Контракт требует активное окно iframe: отклоните сообщение без команды.

MDN — Window.postMessage

Ваш журнал приёмки

Запишите наблюдения по критериям руководства. Журнал не является сертификацией.

Автоматического сохранения нет. Экспортируйте до выхода.

Показатели управления

ПоказательЧто он измеряетПервое действие
Отклонённые неожиданные случаиНегативные случаи без эффекта / выполненные негативные случаиЗаписывать origin, окно и состояние
Завершённые разрешённые обменыЗавершённые ожидаемые / проверенные ожидаемые сценарииРазделять получение и подтверждённый эффект

Распространенные ошибки

    Часто задаваемые вопросы

    Достаточно ли проверки event.origin?

    Нет. Проверьте окно, структуру и состояние. Сервер обязан проверить права для действия.

    Официальные ссылки

    Ссылки подтверждают метод. Адаптируйте проверки к вашему контексту; они не являются сертификацией. Оригинальные названия ссылок и исходные документы могут быть на другом языке.

    Источники проверены .