经典ASP:如何检查ASPSESSIONID * cookie是否已被标记为安全?

时间:2010-01-20 07:50:43

标签: cookies asp-classic iis-6 sessionid

我正在尝试将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。 帮助!

3 个答案:

答案 0 :(得分:4)

因为“新”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
%>

答案 1 :(得分:3)

您似乎在SECURE和HTTPONLY之间感到困惑 这些是不同的。您引用的MS KB文章适用于SECURE。

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

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

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

答案 2 :(得分:2)

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

没有理由阻止在您的网页中运行的javascript访问cookie,而不是javascript访问HTML中的其他数据。

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

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

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