Php 在HTTP请求中显式设置会话ID安全吗?

Php 在HTTP请求中显式设置会话ID安全吗?,php,security,session,Php,Security,Session,我的账户系统位于accounts.example.com 当用户登录accounts.example.com时,会话ID将保存在所有子域的.example.com上可用的cookie上 subdomain.example.com位于另一台服务器中,它无权访问帐户系统的会话数据和数据库。检查用户是否登录的方法是获取会话ID,因为它在所有子域中都可用。然后,我使用会话id和密码(保护HTTP请求的密码)向帐户服务器发送HTTP请求 来自subdomain.example.com的HTTP请求如下所示

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

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

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

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

$sessionId=$\u COOKIE[$sessionokiename]; $post=http\u生成\u查询 大堆 “http_secret”=>验证http_secret, 'session_id'=>$sessionId ; $opts=数组'http'=> 大堆 '方法'=>'发布', 'user\u agent'=>$\u服务器['HTTP\u user\u agent'], “内容”=>$post ; $context=stream\u context\u create$opts; $url='1https://account.example.com/check-login'; $response=@file\u get\u contents$url,false,$context; 因此,HTTP请求将被发送到accounts.example.com/check-login

accounts.example.com上的check-login.php如下所示

$httpSecret=$\u POST['http\u secret']; //如果它来自无效的客户端 如果$httpSecret!==HTTP_秘密{ 抛出新异常“HTTP错误”; } $sessionId=$\u POST['session\u id']; 设置会话ID session_id$sessionId; 然后,我获取会话数据并检查用户是否登录 如果用户已登录,我会将帐户相关数据返回subdomain.example.com

这种方法是好是坏


提前感谢。

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

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

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


如果你想检查你的代码,试试看,里面没有安全漏洞。这是您首先拥有该功能的原因之一



如果您想查看您的代码,请尝试

subdomain.example.com是如何获得密码的?那么我如何获取会话数据?您刚才说您无法访问会话数据,因为子域位于另一台服务器上?我的意思是,我发送一个密码:它是保护服务器HTTP请求的密码。它不是用户的密码。它只是验证HTTP请求。明白了吗?明白了。那么如何获取会话数据呢?该部分是否发生在另一台服务器上,并且您在响应中返回数据?如果您标记了用户如何注销的情况,这会有所帮助。我编辑了我的答案,用户可以从accounts.example.com/logout注销。它将删除帐户服务器中保存的所有会话数据。那么,下一个HTTP请求将返回false,问题是登录了吗?subdomain.example.com是如何获得密码的?那么我如何获取会话数据?您刚才说您无法访问会话数据,因为子域位于另一台服务器上?我的意思是,我发送一个密码:它是保护服务器HTTP请求的密码。它不是用户的密码。它只是验证HTTP请求。明白了吗?明白了。那么如何获取会话数据呢?该部分是否发生在另一台服务器上,并且您在响应中返回数据?如果您标记了用户如何注销的情况,这会有所帮助。我编辑了我的答案,用户可以从accounts.example.com/logout注销。它将删除帐户服务器中保存的所有会话数据。那么,下一个HTTP请求将返回false到登录的问题?我不认为是这样。我使用HTTPs进行服务器间通信。我认为这是一件简单的事情,但事实并非如此。我使用HTTPs进行服务器间通信。我认为这是一件简单的事情。否决理由:答案并没有提供足够的信息,而且含糊不清。为什么要周期性地旋转id是不明确的,并且配置正确。它留给我们太多的假设,它应该是一个评论。你能解释更多吗?我想我已经正确配置了选项。但是,如果你能准确地说出它们是什么,我可以用我的来准确地检查它们。谢谢。我认为知道如何配置会话是不可能的。从问题来看,由于php没有为他/她生成会话id,依靠php在过期时使其无效听起来并不理想。当用户登录时,php生成会话id。而且,我不理解你的意思。@Mjh是的,你是对的。不需要轮换。投票理由:答案没有提供足够的信息,而且含糊不清。为什么要周期性地旋转id是不明确的,并且配置正确。它留给我们太多的假设,它应该是一个评论。你能解释更多吗?我想我已经正确配置了选项。但是,如果你能准确地说出它们是什么,我可以用我的来准确地检查它们。谢谢。我想知道如何配置会话是不可能的
参加这次比赛。从问题来看,由于php没有为他/她生成会话id,依靠php在过期时使其无效听起来并不理想。当用户登录时,php生成会话id。而且,我不理解你的意思。@Mjh是的,你是对的。不需要旋转。