【问题标题】:Share Session Between Two Websites在两个网站之间共享会话
【发布时间】:2017-03-10 16:41:12
【问题描述】:

您好,在此先感谢...
我正在做一个项目,我需要一些说明才能以高度安全的方式在两个站点之间共享数据。目前我正在使用 Form Post 来共享数据。但我考虑是否可以选择从站点 2 获取站点 1 会话数据,因为我认为使用会话更安全。我不知道如何在两个站点之间使用会话,但我希望这里有人知道。

像这样:
站点 1 编码

$_SESSION['customer_id'] = 'XYZ';  
$_SESSION['total_amount'] = '100';  

<a href=https://site2.com/do.php?session_id=<?=$_SESSION['session_id']?>>Click Here</a>  

do.php 中的站点 2 代码

$session_id = $_REQUEST['session_id'];  
$shared_data = bla_bla_bla_function($session_id);  

$customer_id = $shared_data['customer_id'];  
$total_amount = $shared_data['total_amount'];  

或者除了表单发布之外还有什么方法可以在两个网站之间进行安全的数据共享,请告诉我。
谢谢
你的,
卡蒂克扬 R

找到解决方案

我已通过 CURL 将客户 ID 和金额发送到第二个网站,为此在表中创建一个记录并使用记录 ID 生成加密 ID,并返回加密 ID。

所以在第一个网站中,我获得了加密 ID,并将其用于 URL 重定向到第二个网站。

在具有加密 ID 的第二个网站上,我获得了客户 ID 和金额。

【问题讨论】:

  • 尽量将所有需要共享敏感数据的东西放在一个地方。
  • 将会话存储在两个服务器均可访问的数据库中

标签: php session


【解决方案1】:

乌尔克。首先,永远不要这样做:

$session_id = $_REQUEST['session_id'];  

这会导致我们称之为“会话固定”的安全卡车漏洞(阅读更多:http://en.wikipedia.org/wiki/Session_fixation)。

看来您对安全性非常重视。如果您需要从站点 1 到站点 2 共享数据,您应该通过单个消费桥来完成:

1)。单击站点 1 上指向处理程序文件的链接,我们将其命名为 redir.php。

2)。 Redir.php 首先检查现有的会话数据。

3)。 Redir.php 将相关信息连同某种标识符(例如,用户 ID + '_'+ 当前时间的 MD5 散列)以及一个 'consumed' 标志一起写入 DB 行,设置为 false。

4)。 Redir.php 执行 301 重定向到站点 2,以及标识符。

5)。站点 2 从 DB 中读取相关行。

6)。如果数据良好且尚未“消费”,则返回成功并将数据标记为已消费。

7)。如果数据已经被消费,抛出某种错误。

有更复杂的方法可以做到这一点,但我认为这可以处理你想要做的事情。

【讨论】:

  • 我会赞成“Urk。首先,永远不要这样做:”,但是我不得不反对甚至建议它。您知道他们不会阅读您的警告...
  • 啊,我很抱歉。我没有看到这是他们的建议。 +1 警告
  • 根据您的建议,我加粗了“从不,永远”部分。 :)
  • 非常感谢您的回答。我在一个文件管理器上工作,文件可以托管在一个单独的服务器上,我不希望用户能够共享一个链接来下载文件,很好的答案:) 你为什么使用 isConsumed 标志而不是仅仅删除行?
  • @Gazillion - 因为我几乎从不删除行。养成习惯是一个糟糕的模型,尤其是当跟踪和报告突然变得很重要时……你意识到你已经丢弃了 3 年的数据。 :)
【解决方案2】:

您可以为两个站点使用通用会话后端,例如。将会话存储在数据库中

要替换内置文件后端,您可以使用函数session_set_save_handler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-13
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2011-03-27
    • 2012-05-25
    相关资源
    最近更新 更多