【问题标题】:Classic ASP: How to check if ASPSESSIONID* cookie has been marked as secure?经典 ASP:如何检查 ASPSESSIONID* cookie 是否已被标记为安全?
【发布时间】:2011-01-07 04:07:51
【问题描述】:

我试图将 ASP 会话 ID cookie 标记为 HttpOnly,但似乎无法找到判断它是否正常工作的方法。我正在尝试的环境如下: 操作系统:Windows Server 2003 信息系统: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。 救命!!!

【问题讨论】:

  • 标题和问题本身问的不是同一件事。标题是关于Secure 标志的,问题是关于HttpOnly 标志的。它们的目的不同。你能解开困惑吗?

标签: cookies asp-classic iis-6 sessionid


【解决方案1】:

刚刚遇到此问题是因为“新”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
%>

【讨论】:

  • 看起来值得一试。您是否尝试过在 fiddler 中查看响应?
  • 以下是使用 web.config 的方法:stackoverflow.com/q/36045022/901156。除非您有 404 错误,否则效果很好。仍在努力解决这个问题...
  • 这个答案充其量只是一种缓解。这个解决方案首先让会话 cookie 设置为不安全,然后在下一个客户端请求时,它会修补它以保护它。 @rdev5 在他的链接问题中的解决方案更好。
【解决方案2】:

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

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

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

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

【讨论】:

  • 有点晚了,但我很清楚地在寻找一种将经典的 ASP 会话 ID 标记为 HTTPONLY 的方法。请重新阅读我的问题。无论如何,事实证明,在经典的 ASP 中没有办法做到这一点
  • 意识到这对你来说可能有点晚了,我为其他偶然发现误导性回复的人添加了评论
  • @dotnetguy,看到这个相关的question,有一种方法可以使用UrlRewrite IIS 扩展来做到这一点,在my answer 中进行了解释。
【解决方案3】:

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

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

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

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

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

【讨论】:

  • 问题不是关于Secure 标志,而是关于HttpOnly 标志,它旨在禁止JavaScript 代码查看cookie。所以他的架构师在测试这一点的方式上是正确的,而这个答案,被认为是公认的,是错误的。 (当然,混乱来自标题。)
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
相关资源
最近更新 更多