4

我试图将 ASP 会话 ID cookie 标记为 HttpOnly,但似乎无法找到判断它是否正常工作的方法。我正在尝试的环境如下:操作系统:Windows Server 2003 IIS:6 ASP 版本:ASP 3(经典 ASP)

为了将 cookie 标记为仅 http,我遵循了MS KB

根据我们架构师的建议,为了测试这是否有效,javascript document.cookie 应该无法读取 ASPSESSIONID* cookie。我的问题是 javascript:alert(document.cookie) 仍然与 ASPSESSIONID* cookie 相呼应,尽管它似乎已加密(?)

我还尝试通过 Response.AddHeader "Set-Cookie" 执行此操作,但无法确定为该标头提供什么值以标记所有 cookie 或至少将 ASP 会话 ID cookie 标记为 HttpOnly。帮助!!!

4

3 回答 3

5

由于“新”的 PCI 合规性项目,刚刚遇到了这个问题。这有点笨拙,但这似乎有效:

<%
Dim AspSessionCookie
AspSessionCookie = Request.ServerVariables("HTTP_COOKIE")

If len(AspSessionCookie) > 0 Then
    AspSessionCookie = "ASPSESSIONID" & Split(AspSessionCookie,"ASPSESSIONID")(1)
    If  InStr(1,AspSessionCookie,";") then
        AspSessionCookie = Split(AspSessionCookie,";")(0)        
    End If

    Response.AddHeader "Set-Cookie", AspSessionCookie & ";HttpOnly"
Else 
    Response.redirect(Request.ServerVariables("URL"))
End If
%>
于 2013-01-09T23:43:55.443 回答
3

您似乎对 SECURE 和 HTTPONLY 感到困惑。它们是不同的。您参考的 MS 知识库文章是针对 SECURE 的。

设置 cookie SECURE 将停止 IIS/浏览器通过 HTTP 发送 ASP 会话 ID。

设置 cookie HTTPONLY 将阻止脚本 (javascript) 在大多数浏览器中访问该值。

在 sessionID cookie 上设置 HTTPONLY 有一个很好的理由。它有助于防止用户 sessionID cookie 被盗,这可能导致会话劫持。这就是主要浏览器实现它的原因。

于 2011-08-08T05:13:12.367 回答
2

我认为您的架构师在访问 javascript 中的 cookie 方面是不正确的。

没有理由阻止在您的页面中运行的 javascript 访问 cookie,就像 javascript 访问 HTML 中的其余数据一样。

将安全限定符添加到 cookie 的目的是防止它在不安全的请求中发送。

https通常,当使用 plain 向同一服务器发出请求时,仍然会发送客户端连接时设置的 cookie http。当它的 Set 向客户端指示它应该只在后续请求中发送时,使用安全限定符标记一个 cookie,如果这些请求正在使用https.

因此,要测试您的设置,请获取fiddler的副本,然后运行通过 https 访问服务器,然后在同一个浏览器会话中仅使用 http 访问相同的位置。Fiddler 应该显示发送到服务器的第二个请求,并且不应该存在 ASPSESSION cookie。

于 2010-01-20T12:09:19.550 回答