gpt4 book ai didi

asp-classic - 经典 ASP : ASPSessionID is reused

转载 作者:行者123 更新时间:2023-12-01 12:53:59 25 4
gpt4 key购买 nike

我知道如何在 ASP.NET 中处理这个问题,但是有没有办法强制清除经典 ASP session ID?它是一个随机生成的 ID,如 ASPSESSIONIDG32423E,似乎在 RESPONSE.COOKIES 集合中不可用,因此我无法清除它。我们有一个类 ASP 站点仍然存在,最近的一项审计发现,在用户注销后,相同的 session ID 被重复使用。

更多说明:

第一次访问页面,我在 Response 的代理编辑器中看到了这个:

设置 Cookie:ASPSESSIONID=PUYQGHUMEAAJPUYL;路径=/网络应用

注销后,我调用 Session.RemoveAll 和 Session.Abandon,然后将用户重定向到登录页面。此时我应该会看到一个新的 Set-Cookie,它具有不同的 SessionID 值。相反,我没有得到新的 cookie,新的登录 session 重用了原始 session cookie。这是我们必须以某种方式解决的审计发现,但似乎没有办法控制它。

最佳答案

所以我确实想出了一个解决方案,如下所示。我添加了两个名为 Start.asp 和 Start2.asp 的页面。原始登录页面已更改为检查现在在 Start2.asp 上设置的 post 变量,因此如果 login.asp 没有看到该 post 变量,它会重定向到 Start.asp。 Start.asp 通过将其设置为 0 使 ASPSessionID 无效。关键是使用 Response.AddHeader "Set-Cookie"来执行此操作,因为 Response.Cookies("ASPSESSIONID...") 给出了您无法访问的错误元素:

Start.ASP代码

<%
If instr(Request.ServerVariables("HTTP_COOKIE"), "ASPSESSIONID") > 0 Then

Dim Allcookies

AllCookies = Split(Request.ServerVariables("HTTP_COOKIE"),";")
For i = 1 to UBound(AllCookies)

If instr(AllCookies(i), "ASPSESSIONID") > 0 Then
Response.AddHeader "Set-Cookie", Left(AllCookies(i),instr(AllCookies(i),"=") -1) & "=0; path=/;secure;httponly"
End if

Next
End if

Response.Redirect("start2.asp")
%>

接下来,它调用 Start2.asp 查找所有 ASPSEssionID cookie 并附加 Secure; httponly(我不得不为另一个发现添加这些,只有当 SSL 证书在 Web 服务器上时,ASP 元数据库设置才能添加安全。在我们的例子中,SSL 证书在 Web 服务器前面的负载平衡器上)。

Start2.asp代码

<%
'CODE for authorization/authentication
'...

Session.Contents.RemoveAll
Session.Abandon
If instr(Request.ServerVariables("HTTP_COOKIE"), "ASPSESSIONID") > 0 Then
Dim Allcookies

AllCookies = Split(Request.ServerVariables("HTTP_COOKIE"),";")

For i = 1 to UBound(AllCookies)

if left(Request.ServerVariables("HTTP_HOST"),2) = "65" and instr(AllCookies(i), "ASPSESSIONID") > 0 Then
Response.AddHeader "Set-Cookie", AllCookies(i) & "; path=/;secure;httponly"
End if

Next

End if

%>

<html>
<body>
<form action="login.asp" method="post">
<input type="hidden" name="start2" id="start2" value="Yes" />

</form>

<script type="text/javascript">
document.forms[0].submit();
</script>
</body>
</html>

实际上,新的 ASPSessionID 直到在 Start2.asp 中才生成,因此安全和 httponly 的 Set-Cookie 代码也必须在 login.asp 中完成。所以上面的相同代码被复制到 login.asp 的顶部,就在这段代码之后:

If request.form("Start2") = "" Then
Response.Redirect("start.asp")
End if

关于asp-classic - 经典 ASP : ASPSessionID is reused,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com