Обмен сообщениями через Интернет - Web Messaging - Wikipedia
HTML |
---|
Сравнения |
Обмен сообщениями через Интернет или же обмен сообщениями между документами, является API введен в WHATWG HTML5 черновик спецификации, позволяющий документам взаимодействовать друг с другом из разных источников или из исходных доменов[1] при рендеринге в веб-браузер. До HTML5 веб-браузеры запрещали межсайтовый скриптинг, для защиты от атак безопасности. Эта практика также запрещала общение между не враждебными страницами, что затрудняло любое взаимодействие с документами.[1][2] Обмен сообщениями между документами позволяет сценариям взаимодействовать через эти границы, обеспечивая при этом элементарный уровень безопасности.
Требования и атрибуты
Использование API обмена сообщениями postMessage
, текстовые сообщения могут быть отправлены из одного домена в другой, например из родительского документа в IFRAME.[3] Это требует, чтобы автор сначала получил Окно
объект принимающего документа. В результате сообщения могут быть отправлены следующим адресатам:[2]
- другие фреймы или фреймы в окне документа отправителя
- windows документ отправителя явно открывается через вызовы JavaScript
- родительское окно документа отправителя
- окно, в котором открывался документ отправителя
Сообщение мероприятие
будучи полученным, имеет следующие атрибуты:
данные
- Данные или фактическое содержание входящего сообщения.источник
- Источник документа отправителя. Обычно это включает схему, имя хоста и порт. Он не включает идентификатор пути или фрагмента.[1]источник
- вWindowProxy
откуда был взят документ (исходное окно).
postMessage
это не блокирующий вызов; сообщения обрабатываются асинхронно.[4]
Пример
Предположим, мы хотим, чтобы документ A загружался из example.net
для связи с документом B, загруженным из example.com
в iframe
или всплывающее окно.[1] В JavaScript для документа А будет выглядеть следующим образом:
вар о = документ.getElementsByTagName(iframe)[0];о.contentWindow.postMessage('Привет Б', 'http://example.com/');
Происхождение нашего contentWindow
объект передается postMessage
. Он должен соответствовать источник
документа, с которым мы хотим общаться (в данном случае документ B). В противном случае будет выдана ошибка безопасности, и сценарий остановится.[3] Код JavaScript для документа B будет выглядеть следующим образом:
функция приемник(мероприятие) { если (мероприятие.источник == "http://example.net") { если (мероприятие.данные == 'Привет Б') { мероприятие.источник.postMessage(«Привет, А, как дела?», мероприятие.источник); } еще { тревога(мероприятие.данные); } }}окно.addEventListener('сообщение', приемник, ложный);
Слушатель событий настроен для приема сообщений из документа A. Использование источник
свойство, затем проверяется, является ли домен отправителя ожидаемым доменом. Затем документ B просматривает сообщение, либо отображая его пользователю, либо отвечая, в свою очередь, собственным сообщением для документа A.[1]
Безопасность
Плохая проверка происхождения может представлять опасность для приложений, использующих обмен сообщениями между документами.[5] Чтобы обезопасить себя от вредоносного кода из чужих доменов, авторы должны проверить источник
атрибут, чтобы гарантировать, что сообщения принимаются от доменов, от которых они ожидают получать сообщения. Формат входящих данных также следует проверять на соответствие ожидаемому формату.[1]
Поддерживать
Поддержка обмена сообщениями между документами существует в текущих версиях Internet Explorer, Mozilla Firefox, Сафари, Гугл Хром, Опера, опера мини, Opera Mobile, и Веб-браузер Android.[6] Поддержка API существует в Трезубец, Геккон, WebKit и Престо компоновка двигателей.[7]
Смотрите также
- Межсайтовый скриптинг
- Подделка межсайтовых запросов
- Политика одинакового происхождения
- Совместное использование ресурсов из разных источников
- JSONP
Рекомендации
- ^ а б c d е ж Обмен сообщениями между документами - черновик стандарта HTML
- ^ а б Темы программирования WebKit DOM - обмен сообщениями между документами[мертвая ссылка ]
- ^ а б Реми, Шарп, Сообщения, рабочие и сокеты, Представляем HTML5, Новые всадники, 2011, стр. 197–199
- ^ http://www.w3.org/TR/2010/WD-webmessaging-20101118/#web-messaging
- ^ Безопасность HTML5 в двух словах
- ^ Когда я могу использовать обмен сообщениями между документами?
- ^ Выбор поддерживаемых функций в HTML5[мертвая ссылка ]
внешняя ссылка
- Рекомендация по обмену веб-сообщениями HTML5
- Спецификация обмена сообщениями HTML5
- Обмен сообщениями между документами - черновик стандарта HTML, WHATWG
- Темы программирования WebKit DOM - обмен сообщениями между документами, Библиотека разработчика Apple[мертвая ссылка ]
- Энг, Крис (17 мая 2010 г.), Безопасность HTML5 в двух словах, Veracode
- Когда я могу использовать обмен сообщениями между документами?, Могу ли я использовать
- Выбор поддерживаемых функций в HTML5