Безопасно ли устанавливать явные идентификаторы сеанса в HTTP-запросах? - PullRequest
2 голосов
/ 20 марта 2019

У меня есть система учетных записей на accounts.example.com.

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

subdomain.example.com находится на другом сервере и не имеет доступа к данным сеанса и базе данных системы учетных записей.Как я проверяю, вошел ли пользователь в систему, получаю ли я идентификатор сеанса (так как он доступен во всех поддоменах).Затем я отправляю HTTP-запрос на сервер учетных записей с идентификатором сеанса и паролем (пароль для защиты HTTP-запросов).

HTTP-запрос от subdomain.example.com выглядит следующим образом.

$sessionId = $_COOKIE[$sessionCookieName];
$post = http_build_query(
    array (
        'http_secret' => AUTH_HTTP_SECRET,
        'session_id' => $sessionId
    )
);

$opts = array('http' => 
    array (
        'method' => 'POST',
        'user_agent' => $_SERVER['HTTP_USER_AGENT'],
        'content' => $post
    )
);

$context = stream_context_create($opts);
$url = 'https://account.example.com/check-login';
$response = @file_get_contents($url , false, $context);

Итак, HTTP-запрос будет отправлен на accounts.example.com/check-login.

check-login.php на accounts.example.com следующим образом.

$httpSecret = $_POST['http_secret'];
// if it is from an invalid client
if  ($httpSecret !== HTTP_SECRET) {
    throw new Exception('HTTP Error');
}

$sessionId = $_POST['session_id'];

# set the session ID
session_id($sessionId);

# then, I get the session data and checks if the user is logged in

Если пользователь вошел в систему, я возвращаюсьотносящиеся к аккаунту данные на subdomain.example.com.

Этот подход хорош или плох?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

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

А если вы хотите пересмотреть свой код, попробуйте https://codereview.stackexchange.com/

0 голосов
/ 20 марта 2019

Нет, это небезопасно, для этого вы должны использовать HTTPS.

...