2013-11-25 6 views
3

Обычно, когда я создаю сайт, который позволяет пользователям входить в систему, я создаю переменные сеанса информации о пользователе из базы данных и гарантирую, что по крайней мере одна из переменных сеанса доступна на каждой странице сайт, в противном случае пользователь будет перенаправлен на страницу входа в систему, как это:Использовать строку запроса URL-адреса для аутентификации в PHP

if(!isset($_SESSION['username'])) 
{ 
    header("Location:login.php"); 
} 

Но тогда я думал в последнее время, вместо того чтобы использовать переменные сессии для аутентификации пользователей, почему бы не использовать строку запроса. Моя идея заключается в том, чтобы создать уникальную строку, которая основана на некоторых факторов, таких как date(month, year, day) или access time(day, hour) или ip address, и, возможно, hash его с помощью md5 поэтому URL может выглядеть следующим образом

://mysite.com/dashboard?auth=12jsdnnau819wiskj3jdnck23ksj12j3.

Теперь я могу легко выйти из системы, если он не обратился к сайту более одного часа или более одного дня. Но я не знаю, является ли это хорошей идеей, поэтому я здесь, чтобы искать совета по лучшему пути. Спасибо всем.

+0

И почему бы не просто сохранить временную метку доступа в качестве переменной сеанса? – Carlos

+0

Почему бы не использовать политику истечения срока действия сеанса? Внутри веб-сеанс поддерживается аналогичным образом - либо с идентификатором сеанса, переданным на запрос, либо с файлом сеанса, хранящимся в браузере. –

+0

Нет, это не очень хорошая идея. И что это связано с регистрацией пользователя? – CBroe

ответ

5

потому, что URL-адрес:

  • Leak легко
  • Получить закладку
  • Не переносите свои данные по автоматически, когда пользователь открывает новую вкладку и переходит обратно на сайт

и потому что ничто не мешает вам хранить одни и те же данные в сеансе и использовать это, чтобы легко выйти из системы, так что даже не добавьте the one bene подойдет вам.

3

Не делайте этого.

Помните дни, когда идентификатор сессии PHP мог быть сохранен в URL-адресе, и у вас были бы URL-адреса, которые выглядят следующим образом: index.php?PHPSESSID=....?

Мы отошли от этого более безопасных реализаций, удобного для пользователя URL-адрес и т.д.

Так же, как простой пример того, что может пойти не так: Веб-сканер может сканировать ваш сайт, и если достижение панели администратора с правильно аутентифицированным URL (как вы описали), он может стать общедоступным для ... любого.

Итак ... не изобретайте велосипед.

0

Я могу придумать несколько причин не сделать это:

  • Параметр запроса хешированной общедоступной. Это означает, что любой, кто использует этот URL-адрес, будет считаться аутентифицированным пользователем.
  • Как я вижу, токен на пользователя, поэтому все запросы, использующие этот токен, будут выполняться от имени одного и того же пользователя. Если вы используете общий URL-адрес, любой, кто использует этот URL-адрес, выдаст себя за одного пользователя и получит все права доступа, предоставленные этому пользователю.
  • Другие ответы отметили, что URL-адреса могут легко протекать или быть помечены в закладки. В дополнение к своим точкам, как только токен истекает, URL-адрес может стать сломанным, если вы инициируете логин или другой механизм перенаправления аутентификации.
  • Чистый технический недостаток вашей идеи также: вы должны сохраняться маркер при навигации на разных страницах в приложении

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