то, как создать безопасную систему входа в систему php, обеспечение “сохраняют меня, вошло в систему” функциональность?

Я использую простую систему входа в систему на основе СЕССИИ Вар. После того как пользователь входит в систему, var сессии установлен, который говорит моему сценарию, что пользователь должен быть принят в. Я не использую пользовательского клиентского var cookie.

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

5
задан Mike B 18 December 2009 в 17:25
поделиться

3 ответа

Во-первых: настройте директиву session.cookie_lifetime в файлах конфигурации php.ini, или через session_set_cookie_params () .

Затем сохраните имя пользователя и хеш-значение пароля в сеансе и подтвердите этот логин на каждой странице. Пока он действителен, они могут оставаться в системе.

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

if (my_validate_user_function($_SESSION['username'],$_SESSION['passhash']) 
    && $_SESSION['deathstamp'] > time()
) {
    // user is logged in again, oh boy!
}
else {
    // send in the death robots
    header('Location: /login.php',true,302);
}

РЕДАКТИРОВАТЬ: Одна вещь, которую вы, возможно, захотите рассмотреть, это фиксация сеанса и / или захват сеанса. Для предотвращения этого я бы рекомендовал одно (или оба) из двух решений:

  1. сохранить IP-адрес пользователя в сеансе
  2. использовать session_regenerate_id () после каждой успешной попытки входа в систему.
14
ответ дан 18 December 2019 в 08:28
поделиться

Одним из вариантов может быть настройка таблицы MySQL, которая сохраняет переменные сеанса и связывает их с IP-адресами и срок действия, но я не уверен во всех деталях того, как это будет реализовано.

Самый простой (хотя не рекомендуемый) способ сделать то, что вы ищете, - это установить $ _ COOKIE с именем пользователя и паролем на компьютере, которые затем ваш сайт будет проверять, когда пользователь входит в систему.

В целях дополнительной безопасности, вам лучше сохранить только один файл cookie в качестве соленый MD5-хэш данных пользователя, чтобы предоставить потенциальному хакеру меньше информации о данных учетной записи пользователя. Продолжительность может быть установлена ​​при установке cookie; php.

2
ответ дан 18 December 2019 в 08:28
поделиться

Посмотрите на атрибут HTML автозаполнения (в тегах формы или ввода).

<form [...] autocomplete="off"> [...] </form>

W3C> Атрибут автозаполнения

Изменить:

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

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

Во-вторых, это приведет к сбросу других механизмов веб-браузера, таких как автозаполнение поля, когда вы вернетесь к предыдущей странице.

 jQuery (function () {$ (" input [autocomplete = off] "). val (" ");});