Подтвердить что ты не робот

Лучший долгосрочный выбор: JSONP vs EasyXDM

Какой лучший долгосрочный выбор между JSONP и EasyXDM, чтобы разрешить домену на http разговаривать с тем же доменом на https (кросс-протокол)?

Например, мне бы хотелось, чтобы http://mywebsite.com разговаривал с https://mywebsite.com, поскольку файл cookie сеанса находится только по https. Я хотел бы показать имя пользователя на веб-сайте http, не передавая эти данные по http.

EasyXDM пугает меня с помощью версии безопасности, и JSONP не очень четко понимает меры предосторожности.

4b9b3361

Ответ 1

Отказ от ответственности: я являюсь основным автором easyXDM.


На самом деле не так просто ответить на это напрямую, так как есть много вещей, которые нужно учитывать.

Во-первых, давайте сравним easyXDM и JSONP вне сферы действия вопроса.

JSONP позволяет клиентской программе (Javascript с использованием спецификации /DOM ) взаимодействовать с серверной программой (. net, php и т.д., используя db, сессионное хранилище и т.д.), и только клиент может инициировать обмен сообщениями (запрос/ответ, опрос или push, хотя для push вы можете легко установить IMG.src, сделать XHR или пост FORM, поскольку вам не нужен ответ). < ш > Клиент ограничен количеством данных, которые он может отправить на сервер, и эти данные также должны быть отформатированы так, чтобы они соответствовали параметру строки запроса, и сервер должен быть настроен для ответа на указанные данные. Для каждого сообщения выполняется сетевая поездка с затратами, которые это несет.

easyXDM облегчает обмен сообщениями между любыми двумя клиентскими программами, используя транспортный стек на основе строк. Там не обязательно должны быть какие-либо серверные программы, и нет сетевого трафика. Обе стороны равны и могут инициировать обмен сообщениями и могут сохранять состояние на клиенте (отсюда термин "программы" вместо простого Javascript). Сообщения не ограничены по размеру, и до тех пор, пока данные могут быть сериализованы в строку, транспорт может справиться с этим (easyXDM позволяет вам установить собственный сериализатор или использовать JSON).

Основное различие между этими двумя заключается в том, что один находится между клиентом и сервером, где только клиент может инициировать обмен сообщениями, а другой - между двумя равными клиентскими программами, где любой из них может использовать XHR и другие средства для связи с, или передать данные на сервер.

Что касается безопасности; JSONP требует, чтобы клиент полностью доверял серверу, в конце концов, он позволяет ему запускать произвольный код в своей программе. Кроме этого, есть несколько проблем, но это серьезный вопрос.
С easyXDM передается только информация (строка) и никакой код, и приемник должен проверять информацию и действовать на нее. Таким образом, существует абсолютно никакой риск выполнения произвольного кода. В то время как вышеизложенное верно, некоторые из компонентов, на которые easyXDM ссылался, чтобы установить канал, были уязвимы для XSS (специально созданный URL-адрес заставил клиента выполнить произвольный код), но они были закрыты. В настоящее время такие уязвимости не известны, и весь новый код тщательно проверяется.

Я сам использую easyXDM для нескольких сложных проектов, а сайты, такие как LinkedIn, Twitter и Disqus, а также приложения от Nokia и других, создали свои приложения поверх платформы обмена сообщениями, предоставляемой easyXDM, поэтому есть много людей, которые перешли по коду и проверили его, и кто с помощью этого ручается за его безопасность.

В конце концов, это действительно о прецеденте. Например, JSONP нельзя использовать для изменения размера окна между доменами, поскольку для этого требуется взаимодействие клиент/клиент. Но easyXDM может использоваться как для клиента/клиента, так и для клиента/сервера, если одна из сторон использует XHR.

В вашем случае ни одно из них не требуется, если вам нужно просто сделать небольшую часть информации, доступной в незащищенном домене.

  • Перейдите по защищенному домену, установите файл cookie на небезопасный
  • Перейдите по защищенному домену, перенаправьте его на незащищенную передаваемую информацию в запросе
  • Перейдите по защищенному домену, сохраните данные в window.name перед перенаправлением на небезопасный.

Если жизненно важно, чтобы информация не могла быть подделана, вам все это необходимо подписать данные, чтобы можно было подтвердить ее подлинность, но если все, что вам нужно, это имя, тогда это не нужно. Простой способ проверить подлинность -

  • В незащищенном домене создайте случайный секрет и сохраните его и перенаправите на небезопасный домен, передающий секрет.
  • В защищенном домене передайте секрет вместе с информацией (используя любое из описанных выше способов)
  • на клиенте убедитесь, что информация содержит секрет.

Поскольку только две стороны могут иметь секрет, информация проверяется.

Чтобы заключить, на самом деле нет окончательного ответа, все зависит от ситуации. Поэтому выбирайте, но выбирайте с умом:)