Я пытаюсь понять сессий в php.
Насколько я понимаю, в базовой системе входа в систему сеансы работают так:
На странице exampledomain.com/login.php:
if (password_verify($_POST['user_password'], $result->password_hash)) {
//write user data into PHP SESSION
$_SESSION['user_name'] = $_POST['user_name'];
}
Затем на страницах, которые могут просматривать только зарегистрированные пользователи, я проверяю:
if (isset($_SESSION['user_name'])) {
//do something
}
Теперь я не понимаю, что если хакер на своих серверах (hackerdomain.com) сделает что-то подобное, предполагая, что он знает имя пользователя:
session_start();
$_SESSION['user_name'] = 'Test';
<form method="post" action="exampledomain.com/page-only-logged-in-users-can-view.php" name="loginform">
<input type="submit" name="login" value="Login" />
</form>
Теперь он установил значение в $ _SESSION [‘user_name’], чтобы он мог войти без необходимости даже пароля.
Я очень запутался по поводу этого сеанса. Я читаю php документацию, но до сих пор не понимаю.
Сеанс в конце — это cookie, который сервер отправляет в браузер. Этот файл cookie является особенным и имеет некоторые свойства, такие как:
Больше информации на https://developer.mozilla.org/es/docs/Web/HTTP/Cookies
Сессия хранится на сервере, который обрабатывает запрос. Для каждого сеанса генерируется уникальный идентификатор.
Есть несколько атак против сессий:
Если хакер сделает то, что вы написали, он сгенерирует сеанс, но на своем собственном сервере, а не на вашем. По умолчанию PHP хранит сессии в файлах, каталог установлен в php.ini и может быть виден с session_save_path();
функция. Несмотря на то, что он выполняет тот же код, он не будет иметь доступа к $result->password_hash
потому что я думаю, что это исходит от БД, к которой у него нет доступа.
Надеюсь, вы понимаете это сейчас.