AJAX, Поддомены и SSL - PullRequest
       10

AJAX, Поддомены и SSL

17 голосов
/ 24 октября 2008

У меня есть сайт foo.com, который отправляет запросы ajax на bar.foo.com. Будет ли это работать.

Кроме того, если foo является безопасным соединением, https, должен ли bar.foo.com быть тоже https? Могут ли эти два сайта использовать разные сертификаты?

Ответы [ 5 ]

22 голосов
/ 24 октября 2008

При использовании обычного http AJAX: вы говорите о создании междоменного XMLHttpRequest, что запрещено браузерами. Есть предложение W3C, ожидающее , чтобы реализовать его в будущем безопасным способом (частично реализованным IE8, IIRC), но в настоящее время это определенно невозможно.

Однако существуют обходные пути для безопасного выполнения: Подпространство (в котором используются фреймы и document.domain), метод идентификатора фрагмента (опять-таки в фреймах) и window.name техника (опять же, iframes!).

Что касается SSL, вы можете купить отдельные сертификаты для домена и субдомена или один сертификат подстановочного знака (* .foo.com), который покрывает их обоих (естественно, сертификат подстановочного знака будет дороже).

Если у вас есть страница HTTPS, которая запрашивает элементы из других доменов, все будет хорошо, пока все будет HTTPS. Это означает, что если вы используете один из обходных путей для iframe, вы должны указать URL-адрес схемы https:// в атрибуте src iframe.

Последний, менее эффективный обходной путь - иметь скрипт на https://foo.com, который передает запросы небезопасным http://bar.foo.com. (Это также решает междоменную проблему XHR, поэтому вы можете игнорировать другие обходные пути.) Конечно, это означает, что вы отправляете запрос XHR на https://foo.com/someurl, затем он нажимает http://bar.foo.com/someurl, получает ответ и отправляет его вернемся к браузеру, так что с точки зрения производительности вам гораздо лучше просто перенести серверную функциональность bar.foo.com на foo.com, если у вас есть такая возможность. Но если вы не можете переместить серверный скрипт, прокси - это то, что вам нужно.

РЕДАКТИРОВАТЬ: Я изменил последние 3 графики после некоторого дополнительного тестирования и получения обходного пути iframe AJAX (#fragmentidentifier one) для работы в разных доменах HTTPS. Вы можете делать междоменный SSL AJAX с использованием фреймов, если все равно https и в фрейме src используется схема https. Резюмируя:

  1. Краткий ответ: нет, настоящий междоменный XHR не разрешен
  2. Обходной путь с iframes: более эффективно, требуется 2 SSL сертификаты (или групповые сертификаты), несколько сложный
  3. Обходной путь с прокси: менее эффективный, можно сделать с 1 или 2 Сертификаты SSL (1 с внутренним запросом к bar.foo.com через http), несколько сложнее
0 голосов
/ 11 февраля 2013

Да, вы, безусловно, можете делать междоменные представления ajax. Мы сделали точно такую ​​же настройку, используя ssl.com подстановочный сертификат , но вы можете использовать 2 стандартных сертификата на 2 сайтах.

В основном вы будете использовать JSONP (Yahoo, Google, FB и т. Д. Используйте это). Возвращаемое значение оборачивается в функцию и выглядит как

someFunction("{...}");
0 голосов
/ 22 июля 2010

Вы можете объединить JavaScript TLS и Flash для выполнения безопасных междоменных запросов. Таким образом, ваши посетители переходят на https://foo.com, и вы можете сделать XmlHttpRequests на https://bar.foo.com.. Вы можете сделать то же самое с обычным http.

Вам необходимо будет приобрести сертификат SSL, которому браузеры вашего посетителя будут доверять для foo.com, но вы можете создать свои собственные сертификаты SSL для bar.foo.com, bar2.foo.com и т. Д. Более дорогая альтернатива Генерация собственных SSL-сертификатов (это бесплатно) означает покупку SSL-сертификата с подстановочными знаками для * .foo.com. Но если вы делаете междоменные запросы к этим сайтам через foo.com, вам не нужно тратить лишние деньги.

Проверьте проект Forge с открытым исходным кодом на github:

http://github.com/digitalbazaar/forge/blob/master/README

Ссылки на блог в конце дают более подробное объяснение.

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

Да, вы можете получить разные сертификаты для обоих доменов. Все зависит от того, как вы решили его настроить.

Вы можете настроить веб-сервер для foo.com, а также открыть порт 80 для небезопасных и порт 443 для защищенных и использовать оба.

Вы можете настроить другой веб-сервер для bar.foo.com и выполнить те же настройки портов.

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

Возможно, вы сможете купить сертификат * .foo.com, который позволит вам скопировать один сертификат на другой сайт и использовать его.

Независимо от того, если ваш запрос ссылается на http://bar.foo.com, у вас не будет безопасного соединения.

Вам необходимо указать http "s", чтобы веб-сервер использовал порт 443 и попытался проверить сертификат.

Все сертификаты действительно говорят, что источнику доверяют. Даже если вам не доверяют, и вы используете http "s", и браузер заблокирован, ваши данные все равно зашифрованы.

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

Большинство браузеров, в зависимости от настроек безопасности и конфиденциальности, блокируют любые внешние вызовы и разрешают только вызовы AJAX, сделанные в одном домене. Даже субдомены заблокированы, потому что в общих средах они могут представлять реальную угрозу.

Вкратце: делайте AJAX-вызовы только через тот же домен (возможно, вызовите страницу, которая, в свою очередь, вызывает другую страницу из другого домена - через curl / fopen / ...), иначе вы столкнетесь с проблемами. Это также отвечает на ваш вопрос о SSL - не имеет значения, какой SSL вы используете или они одинаковые - вызовы будут заблокированы, несмотря на SSL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...