2013-09-26 1 views
1

Сервер A является стандартным веб-сервером apache/php. Он поставляет HTML/Javascript в браузер, который подключается к серверу B (сервер node.js) с помощью веб-узлов.Мои логики javascript/html и node.js находятся на разных серверах - они могут безопасно взаимодействовать?

Это выглядит следующим образом: Сервер HTTP (request->) Браузер (websockets->) Сервер B

Есть ли способ, чтобы проверить на сервере B, что Сервер является источником запроса?

Насколько я понимаю, HTTP-референт можно легко подделать. Я думал о том, что PHP выдает одноразовый токен, чтобы код javascript мог подтвердить его личность, но взломать его было бы так же просто, как загрузить подлинную страницу с отключенным javascript и извлечением токена.

Это действительно не область компетенции для меня, поэтому я буду благодарен за любой совет - спасибо! :)

+0

Просто для подтверждения, сервер A подключается к серверу B - к какому серверу подключается пользователь? –

+0

Предварительно разделяемые секреты, шифрование, цифровые подписи и общедоступные/закрытые ключи, есть много способов защитить канал, когда он находится в точке. Возможно, двум серверам необходимо связываться друг с другом напрямую или доверенной третьей стороной для установления доверия. Если в середине есть клиент, который может манипулировать запросами в каком-то «хакерском» способе, тогда все гораздо сложнее. Если вы защищаете полезную нагрузку и защищаете ее от несанкционированного доступа, то не имеет значения, что делает клиент (кроме того, что они могут отказаться от отправки). – WiredPrairie

+0

@ ZackNewsham - извините, я не был ясен. Сервер A обслуживает страницу HTML/Javascript для пользователя, который затем подключается к серверу B через веб-узлы. Я хочу проверить, что сервер A был источником запроса на сервере B. – CJX

ответ

0

Хорошо, я никогда не делал это с JS, однако он работает довольно хорошо с центральной системой аутентификации:

1) Пользователь подключается к серверу A и выполняет проверку подлинности (пароль, например)

2) сервер отправляет сообщение на сервер B, говоря «пользователь X связан с адреса Y в момент времени Z»

3) сервер B затем сохраняет эту информацию в базе данных и возвращает уникальный код сервер а

4) Сервер А в свою очередь возвращает его для пользователя.

5) Затем пользователь передает этот уникальный код серверу B в запросе вместе со своим именем пользователя.

6) Сервер B проверяет, что этот пользователь подключен к серверу A с этого адреса в течение последних X минут.

+0

Большое спасибо за вашу помощь! :) Извините, если я не настолько ясен, как мог: Проблема не связана с аутентификацией пользователя - я пытаюсь аутентифицировать источник запроса. Я ищу способ подтвердить, что запрос на сервере B поступает с страницы, обслуживаемой сервером A, независимо от того, вошел ли пользователь в систему. – CJX

+0

Итак, результат тот же - просто пропустите часть «authenticates». Когда пользователь запрашивает страницу с сервера A, сообщите серверу B о ожидании запроса. Затем, когда пользователь подключается к серверу B, он должен предоставить номер, который B предоставил A, каждый номер привязан к определенному IP-адресу, и каждый номер может использоваться только один раз (необязательно) и только в течение определенного периода времени (также необязательно) –

Смежные вопросы