как сделать междоменный запрос, который нельзя подделать - PullRequest
0 голосов
/ 14 апреля 2011

Мне нужно получить данные из Site B на стороне сервера Site A.Чтобы сделать запрос к Site B для получения данных, существуют куки, связанные с доменом Site B, которые должны присутствовать.Поэтому я полагаю, что мне нужно сделать это в javascript с JSONP?

. Моя идея заключалась в том, чтобы использовать JavaScript, чтобы сделать запрос к B, а затем захватить результат и прикрепить его к cookie на домене A, напримерчто последующие запросы к A будут переносить cookie с возвращенными данными (не имеет значения, что требуется два запроса к A для получения информации на стороне сервера A).Это будет хорошо работать, за исключением его полностью взломать.

Данные сами по себе не являются секретными, но мне нужно предотвратить подделку запросов или людей, которые Site A вызывают функцию обратного вызова JSONP вручную или устанавливают cookie A вручную с украденными или иным образом фальсифицированными данными.Кроме того, есть ли другая лазейка для взлома?Это также потребует предотвращения!

Единственный способ, которым я могу думать об этом, заключается в следующем:

Site A генерирует случайный токен и сохраняет его в сеансе.Затем он добавляет этот токен к строке запроса JSONP к Site B.Site B затем отвечает, но шифрует обычные данные вместе с токеном с помощью цифровой подписи.Site A затем вставляет это значение в файл cookie на A.В следующем запросе к A серверная сторона A может перехватить cookie, получить значение, расшифровать его, проверить токен и, если он совпадает со значением в сеансе, доверять остальным данным.

Это звучит разумно?Есть ли более простой способ?Моя цель - уменьшить сложность в конце A.

Спасибо

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Вы можете использовать easyXDM для связи между доменами. С его помощью у вас есть две программы javascript, одна на домене потребителей, а другая на провайдерах, которые могут утверждать домен потребителя. Обе эти Программы могут взаимодействовать с пользователем, и пользователь может аутентифицировать себя для обеих сторон. Благодаря тому, что Программа провайдеров знает, кто пользователь, и знает, кто является потребителем, провайдер может передавать потребителю любые данные, которые он хочет.

Это то, что крупные компании, такие как Twitter, Disqus и LinkedIn, используют для своих API.

1 голос
/ 14 апреля 2011

Чтобы избежать взлома, нужно, чтобы сайты общались друг с другом напрямую, а не с помощью клиентского JavaScript. Напишите небольшой облегченный REST API, который позволяет передавать данные за сцену с сервера на сервер.

При ссылке на сайт A включите маркер аутентификации в URL-адрес, который затем можно будет проверить с помощью скрытого вызова сайта B. Этот вызов может передать любую дополнительную необходимую информацию. Токен, вероятно, должен быть привязан к IP и истек срок действия после использования. В случае успеха вы можете настроить информацию о файлах cookie на Сайте A, чтобы избежать необходимости в дальнейших поездках.

...