在HTTP请求中显式设置会话ID是否安全?

时间:2019-03-20 13:26:55

标签: php security session

我的帐户系统位于accounts.example.com

当用户通过accounts.example.com登录时,会话ID将保存在.example.com(在所有子域中)可用的cookie中

subdomain.example.com在另一台服务器中,它无权访问会话数据和帐户系统的数据库。我如何检查用户是否登录是获得会话ID(因为它在所有子域中都可用)。然后,我将带有会话ID和密码(用于保护HTTP请求的密码)的HTTP请求发送到帐户服务器。

来自subdomain.example.com的HTTP请求如下。

$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 :(得分:-1)

其中没有安全漏洞。这就是您首先拥有该功能的原因之一。

如果您要检查代码,请尝试https://codereview.stackexchange.com/

答案 1 :(得分:-2)

否,它不安全,您应该为此使用HTTPS。