Защита postMessage () на Cordova - PullRequest
       17

Защита postMessage () на Cordova

0 голосов
/ 15 октября 2018

Мобильное приложение My Cordova использует iframe для загрузки на веб-сайт.Я хочу отправлять и получать содержимое через iframe с postMessage().Тем не менее, в ходе моего тестирования источник моего мобильного приложения всегда localhost:8000 или file://.Во всех других примерах на этом сайте используется уникальный домен и источник (например, www.example.com), но мое происхождение явно не уникально.

Как я могу защитить связь между моим мобильным приложением и моим веб-сайтом, если мое происхождениеэто localhost:8000 / file://?Если по какой-либо причине я не могу, могу ли я использовать токены доступа для проверки любого сообщения, как показано ниже?

mobile.app

var iframe = document.getElementById('iframe');
var data = {
  'access_token': 'whatever'
};
iframe.contentWindow.postMessage(data, 'localhost:8000');

website.com

window.addEventListener('message', function(event) {
  if (!event.data || !event.data.access_token) {return;}
  // ajax request to validate the token here
});

Если это поможет, то, что я делаю, это:

  • Определение, когда фрейм iframe завершил загрузку.iframe отправляет обратно объект.{'loaded':true}
  • Отправка объекта с логическим значением из iframe, когда пользователь выходит из системы.{'logout':true}
  • Отправка объекта с логическим значением и html-строкой из iframe, когда пользователь нажимает кнопку печати.{'print':true, 'html':htmlString}
  • Отправьте зашифрованную полезную нагрузку в iframe, затем дождитесь, пока iframe вернет объект.{'success':true}

1 Ответ

0 голосов
/ 24 октября 2018

При отправке данных с использованием postMessage вы можете зашифровать связь, указав https: // ... в URL-адресе источника.

Использование такого рода процедур является воротами для межсайтового скриптинга, вы должны проверить вызывающегои вызываемый на веб-приложение и мобильную сторону.Дополнительные спецификации о postMessage, доступные здесь (и полезные сведения об угрозах): https://developer.mozilla.org/fr/docs/Web/API/Window/postMessage

Для аутентификации вам придется включить аутентификацию в передаваемые данные, как вы это делали (что-то, предоставленное вручную пользователемтелефон, в противном случае он ничего не аутентифицирует).

Для чтения данных из cordova вам следует использовать запрос AJAX, нацеленный на службу на веб-сервере.

...