Защита postMessage() на Кордове
В моем мобильном приложении Cordova используется iframe для загрузки на веб-сайт. Я хочу отправлять и получать содержимое по iframe с помощью postMessage()
. Тем не менее, при тестировании моего происхождения мобильных приложений всегда есть localhost:8000
или file://
. В каждом другом примере на этом сайте используется уникальный домен и источник (например, www.example.com), но мое происхождение, очевидно, не уникально.
Как я могу защитить связь между моим мобильным приложением и моим сайтом, если мое происхождение является localhost:8000
/file://
? Если по какой-либо причине я не могу, могу ли я использовать токены доступа для проверки любого сообщения, как показано ниже?
мобильное приложение
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}
из {'logout':true}
- Отправьте объект с булевой и html-строкой из iframe, когда пользователь нажмет кнопку печати.
{'print':true, 'html':htmlString}
- Отправьте зашифрованную полезную нагрузку в iframe, затем ожидайте, когда iframe вернет объект.
{'success':true}
Ответы
Ответ 1
При отправке данных с помощью postMessage вы можете шифровать связь, указав https://... в исходном URL-адресе.
Использование такого рода процедур - это ворота для межсайтового скриптинга, вы должны убедиться, что вызывающий и вызываемый на веб-приложении и на мобильной стороне. Более подробные сведения о postMessage доступны здесь (и полезное соображение относительно угроз): https://developer.mozilla.org/fr/docs/Web/API/Window/postMessage
Для аутентификации вам нужно будет поместить аутентификацию в данные, переданные так же, как вы (с помощью чего-либо, предоставленного вручную пользователем телефона, в противном случае он не аутентифицирует что-либо).
Чтобы читать данные, от кордовы, вы должны использовать запрос AJAX, ориентированный на услугу на веб-сервере.