gpt4 book ai didi

php - 安全灵活的跨域 session

转载 作者:可可西里 更新时间:2023-11-01 13:11:20 24 4
gpt4 key购买 nike

我遇到了一个问题,希望您能提供帮助。假设我在一家名为“Blammo”的假想公司工作,我们有一个名为“Log”的假想产品。我正在尝试建立一个系统,让某人可以登录到 logfromblammo.com 并订购我们的一些产品,然后当他们准备好购买时,去 checkout.blammo.com 支付他们的订单。最终我想让 Blammo 推出一个新的假设产品,它有自己的网站:rockfromblammo.com,并让该网站也能够与 checkout.blammo.com 共享一个 session ,这样用户就可以在两个产品上使用一个购物车网站。

当然,上面描述的假设场景并不是我公司的实际运作方式,但它是我需要做的事情的一个很好的例子。我们有一个现有的用户数据库,我们有办法在我们的任何网站上对我们的任何用户进行身份验证,但我的目标是允许用户从一个站点无缝地切换到另一个站点而无需重新进行身份验证。这也将使我们能够将购物车等数据无缝传输到结账网站。

我已经(简要地)研究了 OpenID 等解决方案,但我需要能够将我们拥有的任何解决方案与我们现有的身份验证方法集成在一起,这不是非常可靠。有没有什么好的方法可以单独通过 PHP 来完成此操作?

最佳答案

您可以做的是在站点之间创建“交叉”链接以延续 session 。

最简单的方法是通过查询字符串传递 session 标识;例如

http://whateverblammo.com/?sessid=XXYYZZ

在您开始认为任何人都可以捕获该信息之前,请考虑一下您的 cookie 是如何传输的;假设您不使用 SSL,对于使用网络的人来说没有太大区别。

这并不意味着它是安全的;一方面,用户可能会不小心复制/粘贴地址栏,从而泄露他们的 session 。为了限制这种曝光,您可以在收到 session ID 后立即重定向到没有 session ID 的页面。

请注意,在 session ID 上使用 mcrypt() 不会有太大帮助,因为问题不在于值的可见性; session 劫持不关心潜在的值(value),只关心其 url 的可重复性。

您必须确保该 id 只能使用一次;这可以通过创建一个跟踪使用计数的 session 变量来完成:

$_SESSION['extids'] = array();

$ext = md5(uniqid(mt_rand(), true)); // just a semi random diddy
$_SESSION['extids'][$ext] = 1;

$link = 'http://othersite/?' . http_build_query('sessid' => session_id() . '-' . $ext);

收到时:

list($sid, $ext) = explode('-', $_GET['sessid']);
session_id($sid);
session_start();
if (isset($_SESSION['extids'][$ext])) {
// okay, make sure it can't be used again
unset($_SESSION['extids'][$ext]);
}

每次跨越边界时都需要这些链接,因为自上次以来 session 可能已经重新生成。

关于php - 安全灵活的跨域 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com