данные сеанса доступа php между HTTPS и HTTP - PullRequest
7 голосов
/ 02 мая 2011

Спасибо за ваши ответы. Я обновил свой код сеанса PHP.

У меня есть (HTTPS) -login.php, который остается HTTPS, т. Е. Как только пользователь вошел в систему, он перейдет на панель учетной записи. Теперь проблема заключается в том, что пользователь, войдя в систему, нажимает на панель инструментов на странице (HTTP) -about-us.php, сеанс не передается по HTTP, поскольку у меня есть session.cookie_secure = 1, то есть хороший пользователь выходит из системы. Однако когда пользователь возвращается на страницу панели мониторинга, он также выходит из системы по протоколу HTTPS?

Я полагаю, что мне не хватает чего-то, что вызывает эту проблему. Вот мой код:

Это заголовочный файл PHP require () ed для начала сеанса, т.е. на странице login.php:

session_start();
session_regenerate_id(true); /*avoid session fixation attempt*/

/*Create and check how long session has been started (over 5 mins) regenerate id - avoid session hijack*/
if(!isset($_SESSION['CREATED'])) 
{
    $_SESSION['CREATED'] = time();/*time created session, ie from login/contact advertiser/email_confirm only ways for new session to start*/
} 
elseif(time() - $_SESSION['CREATED'] > 300) 
{
    /*session started more than 5 mins(300 secs) ago*/
    session_regenerate_id(true); /*change session ID for the current session and invalidate old session ID*/
    $_SESSION['CREATED'] = time(); /*update creation time*/
}

/*Check if user is logged in*/
if(!isset($_SESSION['loggedin']))
{
    $_SESSION['loggedin']=1;/*used to track if user is logged in on pages*/
}

/*if return false browser supports standard ob_start();*/
if(ob_start("ob_gzhandler")){ob_start();}

Это заголовочный файл PHP require () ed на каждой странице, чтобы проверить, запущен ли уже сеанс:

session_start(); 

$session_errors=0;/* if>0 user not logged in*/

/*check if session is already initiated*/
if(isset($_SESSION['CREATED'])) 
{
    if(time() - $_SESSION['CREATED'] > 300) 
    {
        /*session started more than 5 mins(300 secs) ago*/
        session_regenerate_id(true); /*change session ID for the current session and invalidate old session ID*/
        $_SESSION['CREATED'] = time(); /*update creation time*/
    }
}
elseif(!isset($_SESSION['CREATED'])){$session_errors++;}/*user not logged in*/

/*Check if user is logged in*/
if(!isset($_SESSION['loggedin'])){$session_errors++;}/*user not logged in*/

if(ob_start("ob_gzhandler")){ob_start();}

Также при любом использовании это код для включения HTTPS на нечувствительных страницах, таких как about-us.php

if ($_SERVER['SERVER_PORT']!=80)
{
$url = "http://". $_SERVER['SERVER_NAME'] . ":80".$_SERVER['REQUEST_URI'];
header("Location: $url");
}

Еще раз спасибо за любую помощь, ребята, daza166

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Если вы используете ini_set('session.cookie_secure',1);, файл cookie с идентификатором сеанса будет передан на сервер, только если соединение зашифровано. Поэтому, если вы заставите пользователя получить доступ к about-us.php через незащищенное http-соединение, ваш скрипт не получит cookie, и он появится на странице как пользователь, вышедший из системы. Вы не сможете получить доступ к переменным сеанса.

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

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

2 голосов
/ 02 мая 2011

Похоже, вы задаете здесь несколько разных вопросов, но для решения этого:

Я подумал, есть ли какая-то причина действительно проверять пользовательский агент / IP и т. Д., Поскольку, хотя это уменьшит шансы на угон, он просто сравнивает $ _SESSION == $ _ SESSION т.е. (www.domain.com/login.php?hacker = нет)

Если вы спрашиваете, почему люди сравнивают переменные сеанса с тем, что отправляется, ответ таков: переменные, хранящиеся в $_SESSION, были определены в начале сеанса, т. Е. При входе пользователя в систему, предположительно перед захватом. состоялся (Угонщик может захватить только существующий сеанс, и этот сеанс мог начаться без участия угонщика.) В связи с этим, если мы регулярно сравниваем строку пользовательского агента или IP-адрес, предоставленный в запросе страницы, с тем, который мы сохранили с начала нашего сеанса мы можем обнаружить угон (если у угонщика другая строка / IP-адрес агента пользователя).

Я не знаю ответа на ваш вопрос HTTPS.

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