Есть ли в моем PHP-скрипте лазейки безопасности сеанса? - PullRequest
1 голос
/ 01 мая 2009

После того, как я аутентифицирую информацию для входа в систему, я создаю для них этот сеанс:

 $_SESSION['username']= $userName;

Затем я перенаправляю их так:

header('Location:www.domain.com/profile/' . $_SESSION['username'];

Я хочу, чтобы у моего сайта был красивый URL-адрес, например: www.domain.com/profile/userName

Таким образом, во всех моих ссылках перенаправления (тег HTML <a> или функция PHP header()) я буду использовать:

"www.domain.com/album/" . $_SESSION['username'];

Есть ли какие-либо лазейки безопасности?

Edit:

Нужно ли сначала создавать идентификатор сеанса, используя session_id()?

Итак, для проверки:

if(!isset($_SESSION['id']){
   //redirect to login page
}

Ответы [ 3 ]

1 голос
/ 01 мая 2009

Обычно при использовании сессий мы также должны знать -:

Перехват сеанса, фиксация сеанса

Я предлагаю, чтобы в вашем коде после того, как пользователь вошел в систему, сохраните имя пользователя в переменной сеанса и сохраните еще одно уникальное значение, например, USER AGENT в переменной сеанса. чтобы на каждой странице, которую посетил пользователь, мы могли проверять наличие одного и того же АГЕНТА ПОЛЬЗОВАТЕЛЯ и ИД СЕССИИ, что сделало бы его более безопасным. Чтобы сделать его намного более безопасным, сделайте шифрование, например MD%, на User AGENT, чтобы хакеры не могли его воспроизвести.

Цитируется по PHP РУКОВОДСТВО ПО БЕЗОПАСНОСТИ

<?php

session_start();

if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
    {
        /* Prompt for password */
        exit;
    }
}
else
{
    $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}

?>

См .:
Руководство по безопасности PHP в сеансе
Другой поток по безопасности сеанса

0 голосов
/ 01 мая 2009

Вам нужна авторизация на странице, которая позволяет пользователю редактировать свой профиль. Если они будут редактировать на странице http://www.domain.com/profile/[username], вам необходимо проверить, совпадает ли их $_SESSION['username'] со страницей профиля, на которой они находятся.

В противном случае любой мог бы ввести URL-адрес (в основном угадать номер профиля или имя) и отредактировать его.

Но да, вы должны сначала проверить, вошли ли они ВООБЩЕ:

if (IsSet($_SESSION['username'])) {
// Logged in
} else {
// Not logged in
}
0 голосов
/ 01 мая 2009

Что вы защищаете? Что вы делаете для проверки наличия у них авторизации? Защищаете ли вы их профиль и проверяете ли они авторизацию, потому что у них есть ключ сеанса? Вы никогда не упоминали проверку наличия у них переменной сеанса .

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

Когда пользователь входит в систему, вы хотите сохранить что-то вроде

$_SESSION['authed_user'] = true;

И затем, при последующих попытках редактирования информации вы делаете:

if ($_SESSION['authed_user']) {
  // do something authed users can do
}

И, естественно, вам действительно понадобятся какие-то уровни авторизации. Я рекомендую вам использовать что-то вроде SimpleAuth ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...