Как приступить к реализации страницы «подтвердить пароль», когда пользователь уже вошел в систему?

#php #security #passwords

#php #Безопасность #пароли

Вопрос:

На моем веб-сайте, который я разрабатываю, у меня уже отсортирован весь мой логин, и он работает корректно, включая сохранение сеанса.

Для повышения безопасности и конфиденциальности пользователя я хотел бы реализовать своего рода страницу «подтвердите свой пароль» всякий раз, когда пользователь запрашивает просмотр конфиденциальной страницы (например, журнал активности или изменение некоторых настроек) для дальнейшего предотвращения взлома сеанса. Я, однако, не уверен, как это сделать.

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

Структура, которую, я думаю, я стремлюсь достичь, может быть такой: current page --(user goes onto history log)-> Please confirm your password --(user gets the correct password)-> history log page 1 --(user wants the next page of the history log)-> history log page 2 --(user goes to the home page)-> home page --(user goes onto history log)-> Please confirm your password --(user gets the correct password)-> history log page 1

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

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

Спасибо, Джордан.

Ответ №1:

Я бы просто добавил переменную $ _SESSION для этого пользователя, которая сбрасывается при переходе на любую страницу, которая не является журналом истории.

Более того, я бы использовал общий механизм, подобный этому:

На всех ваших страницах установите

 $page_section = 'something';
  

И затем включите небольшой фрагмент, который делает:

 if(isset($_SESSION['last_visited_section']) amp;amp; $_SESSION['last_visited_section'] != $page_section){
    //New section visited, you could reset $_SESSION['last_visited_section'] or anything relative to your security mechanism here
}
  

Это как-нибудь поможет?

Ответ №2:

Если вы обеспокоены перехватом сеанса, используйте https и установите файл cookie сеанса только https. Для подтверждения пароля попросите их ввести его так же, как вы делаете для входа в систему, и убедитесь, что хэш соответствует тому, что это ваша таблица пользователей, так же, как вы делаете для входа в систему.

Я создаю объект с именем $ scookie, который я использую, чтобы определить, как я хочу проводить свои сеансы.

 session_set_cookie_params( 
$scookie->lifetime, 
$scookie->path, 
$scookie->rootDomain, 
$scookie->secure, 
$scookie->httponly);

session_start();
  

Выше, когда я обеспокоен перехватом (всего, что имеет логин пользователя), я удостоверяюсь, что для параметра $ scookie-> secure установлено значение true.

Комментарии:

1. Позвольте мне внести ясность — если соединение не является SSL, никакая дополнительная проверка пароля не сделает веб-приложение безопасным. Если соединение не является SSL, пароль отправляется обычным текстом и может быть прослушан таким же образом, как и сеансовые файлы cookie. Используйте SSL для всего, где вам нужна безопасность. Не существует безопасного способа сделать это через http. Используйте SSL, установите для cookie сеанса значение secure и возобновляйте сеанс всякий раз, когда они заходят с небезопасной страницы.

2. Спасибо, я уже знал об использовании SSL, но сеанс восстановления с небезопасной страницы для меня в новинку.