Обеспечение пост-сообщения перекрестного происхождения - PullRequest
1 голос
/ 02 мая 2020

У меня есть две веб-страницы в разных доменах, и я контролирую код обеих страниц.

Домен-A открывает Домен-B, используя window.open, а затем Domain-B выполняет некоторую обработку на стороне клиента (может ' не может быть перемещен на сервер), а затем использует postMessage для публикации результатов.

Но перед публикацией этих результатов я хочу убедиться, что window.opener на самом деле я.

Проблема в следующем: Домен-A изменяется и может быть любым (клиенты размещают мое приложение на своих собственных доменах), в то время как Домен-B исправлен. Поэтому я не могу просто установить targetOrigin в моем postMessage, потому что источник все время отличается. Я знаю, что могу просто использовать '*', и он будет работать нормально, но это недостаточно безопасно.

Поэтому перед отправкой postMessage я хочу убедиться, что моя страница действительно была window.opened по моему коду , в то время как домен, в котором размещен код - меняется.

Единственное решение, которое я придумал, это asyn c -криптография. Добавьте в window.open строку запроса подписи, зашифрованную ключом c, и затем проверьте эту подпись, используя crypto.subtle.verify в Домене-B, используя парный ключ.

Я на правильном пути? Есть ли более простые варианты или даже лучшие практики? Похоже, я изобретаю колесо здесь ...

1 Ответ

1 голос
/ 02 мая 2020

Использование перекрестного общего доступа к ресурсам (CORS) является опцией. Есть возможность делать авторизованные запросы, передавая информацию аутентификации. Быть администратором обоих доменов делает это проще. Вы можете использовать настройку Access-Control-Allow-Origin в своих доменах, чтобы они могли делать запросы с учетными данными.

Есть хорошо написанная статья, в которой есть MDN, которая объясняет лучше меня: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Заголовки, которые вы можете включить в свои запросы: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#The_HTTP_response_headers

И этот раздел будет интересен, так как вы хотите убедиться, что сообщения - это ваш код : https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Requests_with_credentials

...