Вопрос по php, session – Пример и исправления сессии php

4

Мой вопрос об этом резюме по фиксации сессии:

  • Alice has an account at the bank http://unsafe.com/. Unfortunately, Alice is not very security savvy.

  • Mallory is out to get Alice's money from the bank.

  • Alice has a reasonable level of trust in Mallory, and will visit links Mallory sends her.

    1. Mallory has determined that http://unsafe.com/ accepts any session identifier, accepts session identifiers from query strings and has no security validation. http://unsafe.com/ is thus not secure.
    2. Mallory sends Alice an e-mail: "Hey, check this out, there is a cool new account summary feature on our bank,http://unsafe.com/?SID=I_WILL_KNOW_THE_SID". Mallory is trying to fixate the SID to I_WILL_KNOW_THE_SID.
    3. Alice is interested and visits http://unsafe.com/?SID=I_WILL_KNOW_THE_SID. The usual log-on screen pops up, and Alice logs on.
    4. Mallory visits http://unsafe.com/?SID=I_WILL_KNOW_THE_SID and now has unlimited access to Alice's account. (credit: RichieHindle)

Вопросы:

Q1 - Есть ли способ явно запретить сайту принимать какие-либо    идентификатор сеанса?

В2 - Я не использую переменную $ _GET на своем сайте, так есть ли способ запретить прием идентификаторов сеансов из строк запроса?

  • Notes: I'm using php 5.4.3 with SSL and will also use session_regenerate_id..
Стоит прочитатьphpsec.org/projects/guide/4.html Cheekysoft

Ваш Ответ

4   ответа
0

Q1. Я думаю, вам нужно проверить, есть ли SID, полученный из GET COOKIE, в вашем хранилище сессий (например, в базе данных). Если ДА - хорошо, если нет, создайте новый на стороне сервера и выполните перенаправление http с новым SID.

Q2. Я не использую php 5.4, но думаю, что следующий код поможет:

unset($_GET['sid'])

Обновление: я думаю, что общее исправление состоит в том, что только внутренний сервер может генерировать идентификаторы SID. Нет пользователя posibilites для этого!

Error: User Rate Limit Exceeded Hoxton .
2

have to отправить какой-то идентификатор сеанса. Если ваше приложение не использует сеансы, нет необходимости вызыватьsession_start()и идентификаторы (отправленные по URL или cookie) просто не используются.

Вопрос 2) Вы можете настроить PHP, чтобы принимать идентификаторы сессии исключительно из файлов cookie и игнорировать идентификаторы из URL (см.session.use_only_cookies). Если вы сделаете это, вы должны также проверить, что опцияsession.use_trans_sid установлен на 0 (это по умолчанию).

Error: User Rate Limit Exceeded Hoxton .
Error: User Rate Limit ExceededcheckError: User Rate Limit Exceededphpinfo()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Hoxton .
Error: User Rate Limit Exceeded Hoxton .
Error: User Rate Limit ExceededisError: User Rate Limit Exceeded
3

session_regenerate_id() каждый раз, когда пользователь входит в систему, вы не сможете зафиксировать сеанс. Когда пользователь входит в систему, его фиксированный идентификатор сеанса будет восстановлен и, таким образом, остановит атаку.

Error: User Rate Limit ExceededinitiatedError: User Rate Limit Exceeded
Error: User Rate Limit Exceededphpsec.org/projects/guide/4.html[/link]Error: User Rate Limit Exceeded Hoxton .
4

которые martinstoeckli упоминал в своем ответе, но это не помешает фиксации сессии. Это делает фиксацию сеанса немного труднее для атаки, но это не предотвращает ее.

Как упоминалось в ServerBloke, вы предотвращаете фиксацию сеанса, используя session_regenerate_id () сразу после проверки регистрационной информации пользователя и перед тем, как показать первую страницу, требующую аутентификации.

Более сложное использование атакующим фиксации сеанса не мешает фиксации сеанса. Вы должны сгенерировать новый идентификатор сессии.

Все больше и больше людей используют публичные необеспеченные ненадежные хот-споты Wi-Fi. Сессии можно понюхать с воздуха. В физической сети их можно прослушивать по проводам. Они также могут заставить вас посетить любой URL-адрес, используя атаку «человек посередине». Таким образом, фиксация сеанса по-прежнему остается проблемой, даже если злоумышленник не может отправить вам URL-адреса.

Зная, что сеансы (и пароли) можно прослушивать, есть еще один шаг, который необходим для предотвращения перехвата сеансов. Это HTTPS (TLS / SSL).

Все защищенные страницы, требующие аутентификации, должны быть доступны только через HTTPS. Таким образом, страница входа (та, где пользователь отправляет свое имя пользователя и пароль) должна быть доступна через HTTP. В этом же сценарии вы должны создать новый идентификатор сессии. Все страницы до конца сеанса должны быть доступны через HTTP для защиты нового идентификатора сеанса.

Вот пример сценария псевдокода login.php:

// Force SSL
if($_SERVER["HTTPS"] != "on") {
  die('Must login via HTTPS');
}

// Load the current sessionID
session_start();

// Validate the login information, being sure to escape the input
...
if (! $valid) {
  die('Invalid login');
}

// Start the new session ID to prevent session fixation
session_regenerate_id();

// Clear the old session
$_SESSION=array();

// Log them in
$_SESSION['user_id'] = $userID;
Error: User Rate Limit Exceeded Hoxton .
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Hoxton .
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededuser provided exampleError: User Rate Limit Exceeded$_SESSION['user_id'] = $userIDError: User Rate Limit Exceeded

Похожие вопросы