Сеансы PHP установлены на другом сервере - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь понять сессий в 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 документацию, но до сих пор не понимаю.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Сессия хранится на сервере, который обрабатывает запрос. Для каждого сеанса генерируется уникальный идентификатор.

Есть несколько атак против сессий:

  • Session Fixing - когда злоумышленник знает идентификатор сессии, он может явно установить PHPSESSID в URL. Обычно это устанавливается в файле cookie
  • Сессионное джекирование, когда вы используете анализатор пакетов, чтобы получить cookie, и вы используете этот cookie.
  • XSS, когда кто-то помещает некоторый код f.e в iframe и когда вы заходите на страницу, он выполняет код с вашими правами в соответствии с сеансом

Если хакер сделает то, что вы написали, он сгенерирует сессию, но на своем собственном сервере, а не на вашем. По умолчанию PHP хранит сессии в файлах, каталог установлен в php.ini и может быть виден с помощью функции session_save_path();. Несмотря на то, что он выполняет тот же код, он не будет иметь доступа к $result->password_hash, потому что, я думаю, он исходит из БД, к которой у него нет доступа.

Надеюсь, вы понимаете это сейчас.

0 голосов
/ 04 июля 2018

Сеанс в конце - это файл cookie, который сервер отправляет в браузер. Этот файл cookie является особенным и имеет некоторые свойства, такие как:

  • Имя. Например, в php по умолчанию PHPSESSID
  • Value. Для идентификатора сеанса - случайная строка, идентифицирующая файл cookie на сервере (этот файл cookie связан с такими данными, как имя пользователя, адрес электронной почты и т. Д.)
  • Домен. Определяет область действия файлов cookie, в которой файл cookie будет отправляться браузером (например, ненулевое значение означает, что основной сервер домена создает файл cookie без поддоменов. Значение домена включает в себя поддомен по умолчанию)
  • Путь: Путь указывает путь URL-адреса, который должен существовать в запрошенном URL-адресе для отправки заголовка файла cookie
  • Expires / Max-Age: срок действия cookie в определенный момент времени (например, 2018-08-03T17: 30: 56.146Z)
  • httpOnly: логическое значение, если true, то cookie не может быть доступен через javascript (document.cookie) для предотвращения атак XSS
  • Безопасный: логическое значение, если истинный файл cookie должен быть отправлен по адресу https
  • Тот же сайт: файлы cookie SameSite позволяют серверам требовать, чтобы файлы cookie не отправлялись с запросами между сайтами, что в некоторой степени защищает от атак подделки запросов между сайтами (CSRF). Файлы cookie SameSite все еще являются экспериментальными и поддерживаются не всеми браузерами.

Больше информации на https://developer.mozilla.org/es/docs/Web/HTTP/Cookies

...