图像缓存,HTTPHandler和FormsAuthentication

时间:2008-11-04 21:54:01

标签: c# iis cookies

设置:

我正在使用Formsauthentication使用Cookie存储登录凭单的网站上工作。该站点还有一个HTTPHandler来管理存储在数据库中的图像。处理程序将图像缓存为公共图像,并在20分钟后过期。我们注意到,由于图像与页面具有相同的生命周期,因此图像还包含Formsauthentication cookie。配置是IIS 6,Win2k服务器,未启用内容过期。

问题:

我们遇到的是人A登录并点击几页。然后Person B点击默认页面而不登录并获取Person A的cookie并且能够看到Person的所有A数据。我们通过启用IIS中的“内容过期”来重现此问题,但没有一致地重现,因此我们不确定内容过期是否帮助我们重现它。我们假设因为图像被缓存为公共图像并且它们还包含带有FormsAuthentication的cookie,所以人B可能无意中获得了人A的cookie。我们知道这不是对网站的攻击。<​​/ p>

有没有人经历过类似这种行为?如果是这样,您能否就如何一致地重现此问题提供任何建议?

7 个答案:

答案 0 :(得分:1)

我们假设cookie位于响应标头中,并且正在将人员A的机器上存在的相同cookie写入人员B.重要的是要注意这个问题发生在IE 7中的人员A和FireFox中的人员B.此外,当人员A退出登出时,由于Formsauthentication票证在服务器上不再有效,因此人员B也已注销。所以是的,他们确实有不同的cookie,但每个cookie中都有相同的formauthentication票证。然而,一个是在没有登录的情况下生成的。

我们也发现了这篇文章,但未能证实这是否是原因。 http://support.microsoft.com/default.aspx?scid=kb;EN-US;917072

我会看到LiveHTTP告诉我的内容,并会报告回来。感谢。

答案 1 :(得分:0)

为什么B人会获得A人的cookie?我假设你的意思是人B的会话cookie与A的登录ID相关联。这是问题的核心。

对我来说,A的登录ID存储在可以交叉请求的地方 - 例如临时文件或数据库 - 而不将其与会话cookie相关联。 (相关问题:页面输出正在缓存,但未通过会话cookie正确关联或检索。)存储或缓存会话信息时,必须与cookie关联。考虑属于浏览器的会话数据,而不是登录。

我会安装Firefox扩展LiveHTTP并检查请求/响应标头。我的赌注是,你会看到A和B有不同的cookie,但在服务器上它们都与相同的登录ID相关联。

答案 2 :(得分:0)

当然,如果这些图像(以及CSS和静态JS文件等)没有作为HTTPS提供,它们将受到ISP或其他代理(实际上是缓存)的缓存,以及他们的饼干。

有一个类似的缓存指令:

Cache-control: no-cache="set-cookie,set-cookie2"

...这应该指示缓存不要缓存“set-cookie”响应头,但我不确定这是多么广泛支持(尽管它是标准的)。

如果可以,请在提供图像时避免使用set-cookie响应标头(如果您没有完全控制会话管理,则可能不容易)。如果必须对用户进行身份验证以查看某些图像,则无论如何都不应公开缓存这些图像。

答案 3 :(得分:0)

抱歉,我忘了提及所有流量都通过端口443作为SSL。我们计划删除图片的设置cookie。但是,当通过SSL处理所有流量时,我们很难搞清楚这种情况。

答案 4 :(得分:0)

所有流量都是SSL ...查看IIS日志所有内容都通过端口443.正在设置的唯一缓存是如上所述公开的图像。我们的假设是结果输出缓存导致问题。

答案 5 :(得分:0)

您确定在页面上没有启用输出缓存吗?

答案 6 :(得分:0)

如上所述,安装Fiddler以调查您的http请求可能会有所帮助。此外,确认cookie是相同的。您的处理程序或表单身份验证系统是否使用静态对象引用?您的代码中可能存在竞争条件。而且没有正确锁定你的资源。