在两个网站之间共享会话

9

你好,提前感谢你的帮助。
我正在处理一个项目,需要在两个站点之间以高安全性的方式共享数据。目前,我正在使用表单提交来共享数据。但是,我考虑如果有一种选项可以从站点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'];  

除表单提交外,是否还有其他安全数据共享的方法?请告诉我。
谢谢。
你的忠实客户,
Kaartikeyan R

解决方案

我通过CURL将客户ID和金额发送到第二个网站,在其中创建一条记录并生成加密ID与记录ID相对应,然后返回该加密ID。

因此在第一个网站中,我获得加密ID,并在URL重定向到第二个网站时使用它。

在第二个网站上,我可以通过加密ID获取客户ID和金额。


2
尝试将所有需要共享敏感数据的内容放在一个地方。 - Eddie
将会话存储在一个可从服务器和客户端访问的数据库中。 - Glass Robot
2个回答

19

哎呀,首先永远不要这样做:

$session_id = $_REQUEST['session_id'];  

这会导致我们所说的“会话固定”安全漏洞(详见:http://en.wikipedia.org/wiki/Session_fixation)。

看起来您对安全性要求比较高。如果您需要从站点1共享数据到站点2,应该通过单个消费桥接进行:

1)在站点1上点击链接到一个处理程序文件,我们称之为redir.php。

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

3)Redir.php将相关信息写入DB行,以及某种标识符(例如,用户ID +“_”+当前时间的MD5哈希值),再加上一个未设置为true的“consumed”标志。

4)Redir.php随同标识符进行301重定向到站点2。

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

6)如果数据有效且尚未被“consumed”,则返回成功并将数据标记为已使用。

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

这样做有更复杂的方式,但我认为这可以解决您想要做的事情。


我会给“呃。首先,永远不要这样做:”点赞,但是如果你甚至建议这样做,我会给你点踩。你知道他们不会读你的警告... - adlawson
啊,我道歉。我没看到那是他们的建议。谢谢提醒,加1分。 - adlawson
根据您的建议,我加粗了“绝不”的部分。:) - John Green
非常感谢您的回答。我正在开发一个文档管理器,其中文件可以托管在单独的服务器上,我不希望用户能够共享下载文件的链接,您的回答很好 :) 为什么要使用isConsumed标志而不是直接删除行? - Gazillion
@Gazillion - 因为我几乎从不删除行。这是一个不好的模式,尤其是当跟踪和报告突然变得重要时...你会意识到你已经扔掉了三年的数据。: ) - John Green

1

你可以为两个站点使用一个共同的会话后端,例如将会话存储在数据库中。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接