Сессия, угоняющая безопасность - PullRequest
0 голосов
/ 05 марта 2012

Итак, у меня есть несколько разных способов попытаться предотвратить перехват сеанса, один из них использует HTTP_USER_AGENT и определяет, изменился ли он во время сеанса.Проблема заключается в том, что если пользователь заходит на веб-сайт с мобильного телефона и переключается с мобильного представления на представление рабочего стола, пользовательский агент изменяется, и пользователь получает следующую ошибку:

if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
    {
        echo "Error: security issue #1 (Please use contact us if recieving this error)";
        exit;
    }
}
else
{
    $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}

Теперь я все еще хочу этот небольшой уровень безопасности, но я не хочу, чтобы появлялось сообщение об ошибке, и я хочу, чтобы сайт оставался видимым для пользователя.Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 05 марта 2012

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

Первый достаточно легко смягчить: чем больше энтропии, тем лучше.Но последнее не может быть смягчено с помощью одной меры, так как идентификатор сеанса может быть открыт / получен несколькими способами:

  • , подслушивающим связь между клиентом и сервером
  • , пропущенная при передаче через URL(HTTP реферер, файлы журналов и т. Д.)
  • Межсайтовый скриптинг (XSS)

Некоторые из них можно исправить довольно легко: можно избежать подслушивания с помощью безопасного канала(то есть HTTPS) и утечки через URL можно избежать путем передачи идентификатора сеанса в файле cookie (с обоими флагами HttpOnly и Secure ).Предотвратить XSS труднее всего, так как вы должны позаботиться о всех исходных пользовательских данных, прежде чем вернуть их обратно клиенту.

Но если вы сделаете это, вы достаточно хорошо защищены от перехвата сеансов.По крайней мере, часть, которую вы можете контролировать как злоумышленник, может получить cookie непосредственно из файла cookie браузера.Но это выходит за рамки ваших возможностей.

1 голос
/ 05 марта 2012

Пользователь должен будет повторно аутентифицировать себя при переключении устройства (а не вызывать ошибку), тогда вы можете использовать обе аутентифицированные переменные $_SESSION['HTTP_USER_AGENT'] для сравнения с будущими запросами.

0 голосов
/ 07 марта 2012

Предпосылка вопроса отражает недопонимание.

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

Надлежащим способом предотвращения перехвата сеансов является использование надлежащих методов безопасности, таких как безопасное управление сеансами, SSL на уровне сайта, защита CSRF, правильная проверка ввода и выходное экранирование, предотвращение XSS и т.п. OWASP обладает отличными ресурсами для защиты веб-приложений.

...