Надежно проверьте, вошел ли пользователь в другой домен (JSONP) - PullRequest
3 голосов
/ 13 сентября 2011

Для моего вопроса, скажем, есть веб-приложение и сайт на разных доменах. Пользователь может войти в веб-приложение, в котором он находится на протяжении всего сеанса, или использовать cookie-файл, если пользователь хочет, чтобы его запомнили на 30 дней. Очень стандартный.

Теперь с сайта мне нужно проверить, вошел ли пользователь в веб-приложение (в другом домене). У меня явно нет прямого доступа к сеансу браузера или файлам cookie для веб-приложения. Я считаю, что мой единственный вариант - это сделать запрос JSONP из JavaScript сайта на URL в домене веб-приложения. Затем веб-приложение отвечает либо 1, либо 0, в зависимости от того, вошел ли пользователь в систему. Я направляюсь в правильном направлении? В любом случае я могу выполнить запрос JSONP и получить ответ без особых затруднений.

Несмотря на то, что у меня есть значение 1 или 0, зарегистрированное в JavaScript, мне нужен доступ к значению в бэкэнд-коде сайта (Ruby, PHP и т. Д.). Теперь мы действительно добрались до сути моего вопроса. Это значение может быть сохранено в файле cookie с помощью JavaScript, но что мешает злоумышленнику просто установить этот файл cookie вручную? Как безопасно передать это значение из ответа JSONP в мой внутренний код?

Несколько заключительных замечаний:

  1. Я не могу выполнить запрос к URL-адресу веб-приложения из внутреннего кода сайта (Ruby, PHP), поскольку агент пользователя является сервером, а не браузер, который, как известно веб-приложению, вошел в систему или нет.
  2. Я считаю, что Facebook Login / Connect работает аналогично этому, но трудно понять все, что происходит, глядя на код. Объяснение шаблона (если это шаблон) было бы наиболее полезным!

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 13 сентября 2011

Я думаю, что вы приближаетесь к этому не с той стороны забора. Вместо того, чтобы проверять, вошел ли пользователь в систему через междоменный запрос JSONP (который открывает вектор атаки, который трудно смягчить), почему бы не сделать межсерверный запрос между двумя приложениями?

Я не уверен, какую платформу вы используете, но любая из них должна иметь возможность сделать HTTP-запрос на другой сайт и получить ответ о пользователе. Затем вы можете заблокировать это приложение, чтобы принимать только те запросы от этого сервера, а не разрешать их от любого пользователя, который хочет спросить.

0 голосов
/ 13 сентября 2011

Первое, что приходит мне в голову, - это чтобы веб-приложение возвращало не просто 0 или 1, а какой-то зашифрованный токен, который затем можно было бы проверить на стороне сервера в другом домене. Это может быть что-то довольно простое, например, md5 ('thingsecret '. $ Userid) в дополнение к состоянию входа в систему. Когда бэкэнд вашего внешнего сайта получает cookie из своего javascript-интерфейса, просто сделайте тот же md5 и сравните значения, чтобы убедиться, что никто не подделал идентификатор пользователя.

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