<分区>
我想知道是否有人可以在这里提出答案:
我们有一个使用 PHP session (以及 SSL 等其他措施,在任何人开始对我谈论安全之前!)保护的系统,我们希望在就具体问题联系客户时通过电子邮件发送直接链接到系统.我们发送的链接包含 GET 参数。
我们的建议是让客户确保他们已登录,然后单击链接 - 链接在浏览器中启动,启动 session ,然后将用户直接带到所需的页面。但是,当用户从 Microsoft Office 应用程序中单击链接时,这不起作用。
当从 Outlook(或实际上是 Excel)中单击链接时, session 变量未被拾取,并且要求用户重新进行身份验证。进一步挖掘,似乎请求是通过用户代理设置为 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 中启动的(这也是设置 session 的浏览器)。我想知道是否有一些 session 安全代码启动,说如果浏览器不同, session 必须被欺骗?
为了解决这个问题,我尝试为初始页面加载设置一个重定向页面:
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();
}
这失败了:请求仍然通过 User-Agent 集,并且 session 不存在。
有什么想法/建议吗?