我想知道是否有人可以在这里提出答案:
我们有一个使用 PHP 会话(以及其他措施,如 SSL,在任何人开始对我谈论安全之前!)进行保护的系统,我们希望在联系客户讨论特定问题时通过电子邮件将直接链接发送到系统。我们发送的链接包括 GET 参数。
我们的建议是让客户确保他们已登录,然后单击链接 - 链接在浏览器中启动,选择会话,并将用户直接带到所需的页面。但是,当用户单击 Microsoft Office 应用程序中的链接时,这不起作用。
当单击 Outlook(或者实际上是 Excel)中的链接时,不会拾取会话变量,并且会要求用户重新进行身份验证。进一步挖掘,似乎请求是通过将用户代理设置为Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0E; .NET4.0C; ms-office)
但该站点在 Chrome 中启动的(这也是设置会话的浏览器)。我想知道是否有一些会话安全代码启动,说如果浏览器不同,会话必须被欺骗?
为了解决这个问题,我尝试为初始页面加载设置重定向页面:
if (isset($_GET['targetpage'])) {
// It's a GET request - redirect using header-location
$all_get = $_GET;
unset($all_get['targetpage']);
$redir = $_GET['targetpage'].'?'.http_build_query($all_get);
header('User-Agent:');
header("Location: {$redir}");
die();
}
这失败了:请求仍然通过用户代理集,并且会话不存在。
有什么想法/建议吗?