Кажется, что самой популярной школой мысли является случайное генерирование идентификаторов сеанса, для восстановления идентификатора сеанса при входе пользователя в систему и периодической регенерации идентификатора сеанса для существующих пользователей во время входа в систему, только для дополнительной безопасности.
Я использую альтернативное решение, но я не опытный PHP-профессионал, и я обеспокоен тем, что есть яркое отверстие безопасности (или два ... или более), которые могут отсутствовать.
Если вы могли бы взглянуть на следующее и сказать мне, как это может быть скомпрометировано, я был бы признателен.
Сценарий создает идентификатор сеанса, привязанный к машине пользователя, и остается неизменным во всем. Я думал о том, чтобы включить текущую дату в хеш, но наши ночные рабочие перейдут в полночь. Не то, чтобы я был рядом, чтобы услышать их жалобы;)
Я понимаю, что использование IP-адреса открывает его для злоупотребления, если два пользователя с той же ОС и браузером сидят в кафе, используя бесплатный Wi-Fi, но это для внутренней MIS, поэтому каждый пользователь будет иметь свой собственный статический IP-адрес. Если они решат позже сделать доступным из Интернета, у меня проблемы! Но это не было частью спецификации :)
// Set the session ID
$session_hash = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_HOST'] . $_SERVER['REMOTE_ADDR']);
// Compare against session ID received from user
if (session_id() != $session_hash)
{
session_destroy();
unset ($_SESSION);
session_id($session_hash);
session_start();
}
else
{
// Attempt to load user details from database if $_SESSION['user_ID'] is set.
}
Все конструктивные комментарии приветствовали и оценили!
И я подумал, что я все умный. Я полностью понимаю вашу точку зрения, но думал, что встроенные сессии PHP не были такими безопасными. – Kalessin 2010-11-27 11:33:55