3

ASP.NET でこれを処理する方法は知っていますが、クラシック ASP セッション ID を強制的にクリアする方法はありますか? ASPSESSIONIDG32423E のようなランダムに生成された ID であり、RESPONSE.COOKIES コレクションでは使用できないようで、クリアできません。クラスの ASP サイトがまだぶらぶらしていて、最近の監査で、ユーザーがログアウトした後、同じセッション ID が再利用されていることが判明しました。

詳細説明:

最初にページにアクセスすると、応答のプロキシ エディターに次のように表示されます。

セット Cookie: ASPSESSIONID=PUYQGHUMEAAJPUYL; path=/ウェブアプリ

ログアウト後、Session.RemoveAll と Session.Abandon を呼び出し、ユーザーをログイン ページにリダイレクトします。その時点で、SessionID の値が異なる新しい Set-Cookie が表示されるはずです。代わりに、新しい Cookie を取得せず、新しいログイン セッションで元のセッション Cookie を再利用します。これは何らかの方法で解決しなければならない監査結果ですが、これを制御する方法はないようです。

4

3 に答える 3

3

そこで、次のようにこれに対する解決策を思いつきました。Start.asp と Start2.asp という 2 つのページを追加しました。元のログイン ページは、現在 Start2.asp で設定されている post 変数をチェックするように変更されました。そのため、login.asp がその post 変数を認識しない場合、Start.asp にリダイレクトされます。Start.asp は ASPSessionID を 0 に設定して無効にします。Response.Cookies("ASPSESSIONID...") でアクセスできないエラーが発生するため、キーはこれを行うために Response.AddHeader "Set-Cookie" を使用しています。要素:

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")
%>

次に、すべての ASPSEssionID Cookie を探して Secure を追加する Start2.asp を呼び出します。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 内で生成されるまで生成されないため、secure および httponly 用の Set-Cookie コードも login.asp で実行する必要があります。したがって、上記の同じコードは、次のコードの直後に login.asp の先頭にコピーされました。

If request.form("Start2") = "" Then
    Response.Redirect("start.asp")
End if
于 2012-05-25T14:32:31.873 に答える
1

IMO - セッション ID を消去するだけでなく、セッションを終了する必要があります。この場合、Session.Abandon が解決策です。参考:https ://devguru.com/content/technologies/asp/session-abandon.html

HTH。

于 2012-05-21T20:15:50.050 に答える
0

これはASP.NETに関連していますが、ASPで見られる動作について説明しています

セッションを放棄しても、セッションIDCookieはユーザーのブラウザから削除されません。したがって、セッションが放棄されるとすぐに、同じアプリケーションへの新しいリクエストは同じセッションIDを使用しますが、新しいセッション状態インスタンスがあります。

http://support.microsoft.com/?kbid=899918

この動作は、同じセッションで同じブラウザを使用している場合にのみ発生します。ブラウザを閉じるとすぐに、セッションCookieが失われます(明示的な有効期限が設定されていない場合)。

呼び出しSession.Abandonてから、JavaScriptを使用してすべてのCookieをクリアするページにユーザーをリダイレクトしてから、ログインページまたは任意のページにリダイレクトしてみてください。

JavaScriptですべてのCookieをクリアする

于 2012-05-21T20:21:23.187 に答える