Как я могу гарантировать, что правильный пользователь вошел в систему, когда сайт вызывается сайтом - PullRequest
0 голосов
/ 22 сентября 2011

Извините за странную, рекурсивную формулировку названия, но я не мог придумать лучшего названия. Как я упоминал ранее, у меня есть 2 веб-сайта A и B, и я интегрирую B в A, так что B по-прежнему доступен как автономный сайт, но также как часть A (в iframe). Оба сайта имеют свои экраны входа в систему. Мне нужно было обойти экран входа для сайта B, когда к нему обращались из A. Я сделал это, как показано ниже:

Сначала A проверяет, совпадает ли местоположение B с (то есть они работают на сервере), если это так, то информация для входа в систему сохраняется в переменных сеанса и проверяется на b.

Если местоположение B - другой сервер, то информация для входа отправляется через URL-адрес (см. Здесь: Мне нужно объединить два сайта, каков наилучший способ передачи информации для входа? ) Возможно, это небезопасно, учитывая, что URL можно увидеть в исходном коде, но я не мог придумать лучшего решения.

Когда вызывается веб-сайт B, вызывается index.php, а index.php проверяет, вошел ли пользователь в систему или нет (независимо от того, установлена ​​переменная сеанса или нет), если пользователь не авторизован, index.php вызывает check .php, который проверяет данные аутентификации, отправленные сайтом a. Если данные в порядке, check.php аутентифицирует пользователя, и как только скрипт завершается, мы возвращаемся в index.php.

Теперь единственная проблема заключается в том, что если пользователь ADMIN заходит на веб-сайт a, то нажимает на ссылку для веб-сайта b, веб-сайт b отображается, и теперь он зарегистрирован как администратор на обоих сайтах. После выполнения некоторых действий ADMIN выходит из САЙТА A БЕЗ выхода из сайта b. Затем его босс, СУПЕР АДМИН, подходит, пихает АДМИНА со своего места и входит на сайт а. SUPER ADMIN затем нажимает на ссылку на сайт b, только чтобы обнаружить, что он вошел на сайт b как ADMIN. В этот момент он поднимает трубку, звонит мне и начинает выкрикивать ругательства на меня.

Итак, это не самая серьезная проблема, но было бы неплохо решить. Одно из решений, которое я имею в виду, - это добавить поле идентификатора b веб-сайта каждому пользователю сайта a и также отправить его в URL. Таким образом, когда вызывается check.php, он сохраняет поле id в переменной SESSION. Таким образом, когда index.php снова вызывается веб-сайтом a, он проверяет, установлена ​​ли переменная Session, и если да, то сравнивает переменную set с новой переменной, отправляемой $ _GET. Если URL-адрес другой, он уничтожает сеанс и включает в себя check.php, я, вероятно, смогу реализовать это решение, но это займет немного времени, и я не уверен, хорошая ли это идея или нет, поэтому я хотел спросить, есть ли другой лучший способ, или советы для вышеупомянутого решения.

Спасибо за ваше время, хорошего дня!

1 Ответ

1 голос
/ 22 сентября 2011

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

Когда прибудет SUPER ADMIN, он получит новый токен для входа в систему, сообщив серверу B о завершении активного сеанса, и войдет в систему для нового пользователя.

Это не очень безопасно, но довольно просто и должно работать достаточно хорошо для этого сценария ...

...