关于vbscript:添加相同站点;保护经典ASP中的Cookie

Adding Same-site; Secure to Cookies in Classic ASP

我们正在运行一个经典的ASP网站,并且在Chrome浏览器中出现Cookies方面的问题。 Chrome强制执行cookie的安全设置(https://www.chromestatus.com/feature/5633521622188032)

我们将cookie设置如下:

1
2
Response.AddHeader"Set-Cookie","TestCookie=This is a Test; path=/; SameSite=None; Secure"
Response.Cookies("TestCookie").Expires = Date + 1

但是,Chrome出现问题,当调用其他域的资源时,会话突然结束。

Chrome浏览器的cookie详细信息如下:

1
2
Send for
Same-site connections only

请注意,正如我认为的那样,没有提到"安全"。
为此,在经典ASP中设置Cookie的正确方法是什么?


您当前的设置响应Cookie的方法存在问题。

使用Set-Cookie设置标题后,通过使用Response.Cookies,您实际上是在创建一个名为" TestCookie "的新的空cookie。相反,您希望将到期时间合并到现有的Set-Cookie标头中。

测试您的代码,这是Response标头的内容:

Response

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%
Function FormatCookieDateTime(interval, value, tz)
  Dim dt: dt = DateAdd(interval, value, Date())
  Dim tm: tm = Time()
  Dim result: result = WeekDayName(WeekDay(dt), True) &"," & _
    Right("00" & Day(dt), 2) &"-" & _
    MonthName(Month(dt), True) &"-" & _
    Year(dt) &"" & _
    Right("00" & Hour(Time()), 2) &":" & _
    Right("00" & Minute(Time()), 2) &":" & _
    Right("00" & Second(Time()), 2) &"" & tz
 
  FormatCookieDateTime = result
End Function

Response.AddHeader"Set-Cookie","TestCookie=This is a Test; path=/; SameSite=None; Secure; expires=" & FormatCookieDateTime("d", 1,"GMT")
%>

内置了使使用正确格式设置有效期更容易的功能。

记住Secure用于安全连接

因为您要设置两个cookie(一个通过AddHeader()和一个通过Response.Cookie),所以可能不清楚,但是如果连接未使用HTTPS,则第一个设置了Secure的cookie将被chrome忽略。实际上,如果您在Chrome开发工具中查看请求,您应该在Set-Cookie标头旁边看到一个警告符号,上面显示(悬停时)以下内容:

This set-cookie had the"Secure" attribute but was not received over a secure connection.


标准的Res??ponse.Cookies方法不能与通过使用更底层的Reponse.Addheader设置的cookie一起可靠地工作。我经历过同样的事情。

我无法测试,但您可能想尝试两件事:

  • 请勿在同一ASP代码块中使用这两个指令。我的猜测是使用AddHeader()设置cookie将绕过经典ASP \\的cookie集合。因此,Classic ASP将不知道已设置此cookie。您可以尝试在一个页面上设置此cookie,然后将其发送到浏览器,然后在另一个页面上设置到期时间。

  • 尝试使用相同的AddHeader()指令设置到期时间。您将必须在标头级别上查看如何完成此操作,但是肯定应该可行。

  • 我有一些在线示例代码,使用Response.AddHeader()设置了一个安全的HTTPOnly cookie,但没有设置到期时间,这导致cookie在关闭浏览器(选项卡)时失效:

    https://gitlab.com/erik4/classic-asp-book-examples/-/blob/master/global.asa