1

我想知道是否有人可以在这里提出答案:

我们有一个使用 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();
}

这失败了:请求仍然通过用户代理集,并且会话不存在。

有什么想法/建议吗?

4

2 回答 2

1

不要这样做header('User-Agent:');......因为这将给出一个空的用户代理,而在随后的请求中,将再次使用普通的用户代理。

您可以尝试不同的 HTTP 30x 代码……我知道浏览器的行为往往会根据所使用的确切 30x 代码而有所不同。

于 2013-04-10T10:32:44.557 回答
0

这只是部分解决方案,但对我来说已经足够好了。

使用我们的网站需要启用 JavaScript,所以我不必担心禁用 js 的用户。我已经添加了一个 JavaScript 重定向,带有“如果未重定向,请单击此处”链接,这似乎就足够了。

于 2013-04-12T09:49:16.457 回答