是否可以为您拥有的站点/服务器设置cookie?

时间:2009-01-29 22:00:35

标签: php cookies curl exchange-server logonserver

以下是我的问题的快速版本:

当cookie用于其他服务器(在这种情况下是Exchange邮件服务器)时,是否可以以某种方式将cookie设置到客户端的浏览器中?在这种情况下,尝试设置cookie的服务器位于“intranet.myschool.edu”,交换服务器位于“owa_server.myschool.edu”。


以下是完整的问题:

我有一个php脚本,它使用cURL对启用了基于表单的身份验证的Exchange服务器进行HTTP POST。

当我成功进行HTTP POST(包括发布网址中的用户/传递)时,Exchange Server(或更具体地说,https://my.school.edu/exchweb/bin/auth/owaauth.dll文件)输出cookie。 具体来说,它输出“sessionid”和“cadata”id。

将这些cookie ID写入服务器上的文本文件后,cURL / PHP可以引用它,然后从Exchange / OWA服务器请求数据(通过webdav等)。

那部分有效。 我想解决的问题是现在将cookie ID传递给客户端浏览器,以便他们可以使用这些cookie ID自动登录到他们自己的OWA帐户。

本质上,我希望我们的用户使用他们的Active Directory ID登录我们的Intranet,并查看他们最近发送的电子邮件的快照。然后,如果他们需要,我会给他们一个小的链接切换到完整的OWA Web应用程序。当这种切换发生时,我不希望他们必须手动登录OWA。由于他们已经在Intranet的前面提交了他们的Active Directory用户名和密码,我希望他们能够自动登录到OWA。

我应该注意,由于我们混合使用Mac OS,Windows和Linux,因此无法使用Windows身份验证尝试进行单点登录。

我以为我可以做一个“setcookie”并分配cURL获得的cookie ID并将它们放入客户端浏览器中。

这不可能吗?是不可能以这种方式“欺骗”Exchange / OWA(或任何其他网站)。 我有cURL捕获的合法cookie ID。有没有办法将这些传递给另一台计算机上的客户端浏览器?

在最糟糕的情况下,使用Javascript自动将用户名和密码粘贴到OWA登录页面是我唯一的希望吗? 有没有人对如何避免我的Exchange / OWA双重登录问题有任何其他想法?

感谢您提供的任何帮助!

7 个答案:

答案 0 :(得分:5)

来自RFC 2965(NB HDN =“主机域名)

  

主机A的名称域名与主机B匹配   如果

  *  their host name strings string-compare equal; or

  * A is a HDN string and has the form NB, where N is a non-empty
     name string, B has the form .B', and B' is a HDN string.  (So,
     x.y.com domain-matches .Y.com but not Y.com.)
     

请注意,域匹配不是   交换操作:a.b.c.com
  domain-matches .c.com,但不是   反转。

因此使用.myschool.edu作为域应该有效。 NB领先。是必不可少的

答案 1 :(得分:3)

可能能够设置域名为“.myschool.edu”的Cookie。理论上,然后将其发送到“myschool.edu”子域下托管的任何其他网站。

但在实践中,您的客户端软件可能会认为Cookie的范围太宽,并且拒绝将其发回。

答案 2 :(得分:1)

我认为如果可能的话,这将是一个严重的安全漏洞......

答案 3 :(得分:1)

  

在这种情况下,尝试设置cookie的服务器位于“intranet.myschool.edu”,交换服务器位于“owa_server.myschool.edu”。

你应该能够做到这一点。

我在我的网站上执行此操作(为了示例,我将更改名称):

我在网址上有一个网络应用

<强> webapp.domain.com

当用户登录时,我设置了PunBB论坛包的cookie,地址为:

<强> forum.domain.com

通过设置/清除PunBB论坛cookie,我可以自动在论坛帐户上登录/注销我的用户(这当然假设注册是同步的,在我的情况下我删除了论坛注册和主站点注册为用户创建论坛帐户。

您需要做的就是在子域#1中将Cookie路径设置为“/”(默认值),并将Cookie域设置为“domain.com”。然后,子域#2中的应用应该会看到cookie。

编辑:我看到 barrowc 已经回答,我在某些示例中看到了“.domain.com”模式,我的网站使用“domain.com”作为Cookie域,它也有效(也许php set_cookie如果缺少会添加前导点?)

答案 4 :(得分:0)

您的浏览器决定......但通常不会,您不能。这被认为是一种XSS漏洞。

答案 5 :(得分:0)

您可以使用iframe设置Cookie,即。在您的Web服务器上有一个iframe,它向您的交换http服务器(https://my.school.edu/exchweb/)上的页面发出请求,并将您想要的cookie变量设置为get或post变量。然后使用vars为该域设置cookie,并将用户重定向到Exchange服务器。

现在,在OWA的后端可能有逻辑检查IP地址,用户代理等....当注册可能使此无效的会话时.....不确定

答案 6 :(得分:0)

我们几个月来一直在努力争取这个,我们能想到的最好的就是允许网络服务器在每次登录时获取Exchange的cookie。问题是,没有cookie亲和力,我们无法确保Web服务器获取的cookie来自客户端连接的相同负载平衡节点。