1

Ich frage mich, ob ServletResponse.reset() der zusätzliche Schritt ist, den ich nicht angemeldeten Benutzern vom Zugriff auf Servlets blockieren muss, oder wenn es Risiken oder Nachteile gibt.Ist ServletResponse.reset() eine praktikable Möglichkeit, nicht autorisierte (ausgeloggte) Benutzer daran zu hindern, auf Servlets zuzugreifen?

Hintergrund:

Die Art und Weise my website Arbeiten, zunächst können die Benutzer sehen nur bestimmte Seiten, nachdem sie ein Konto und melden Sie sich mit diesen Anmeldeinformationen erstellen. Das Problem, das ich anfangs hatte, war, obwohl ich session.invalidate() nutzte, wenn ein Benutzer abgemeldet wurde, konnte er die Anfrage erneut senden (zum Beispiel über den Zurück-Button) und war in der Lage, aus dem nicht autorisierten Zustand auf eingeschränkte Inhalte zuzugreifen. Angenommen, die Sitzung ist abgelaufen, wie oben, bin ich nicht sicher, wie das überhaupt möglich ist oder was richtig getan werden kann, um es zu verhindern.

Durch Experimentieren als Behelfslösung, habe ich versucht, ServletResponse.reset(), und dass schien es zu lösen, aber ich verstehe nicht, warum es funktioniert, und deshalb bin ich mir nicht sicher, dass es eine robuste tragfähige Lösung ist.

Meine spezifischen Fragen sind:

  • Ist das Zurücksetzen den Antwortpuffers (einschließlich Header und HTTP-Statuscode) eine sichere oder empfohlenen Praxis, oder gibt es einen besseren Weg, es zu tun?

  • Wie kann ich mich mit dem Sitzungsobjekt anmelden und nicht mit einem Sitzungscookie?

Antwort

0

Ich glaube nicht, ServletResponse.reset() etwas weh, aber es ist nicht standard operating procedure und es sollte nicht notwendig sein. Stellen Sie nur sicher, dass Sie die richtigen Dinge tun, die Sitzungen ungültig machen und validieren.

Invalidierung Sitzung:

  • Anruf session.invalidate() zu Sitzungsattribute gebunden zu einer Sitzung zu entfernen, sondern auch sicher sein, explizit Code seine eigene veraltete Verweise auf den vorherigen Sitzungszustand entfernt. Session-Cookies können explizit, indem der Cookie mit genauen Kriterien gesetzt und sein Höchstalter auf 0.

Validieren Sitzung entfernt werden:

  • Bei der Authentifizierung können Sie überprüfen, ob getSession(false) kehrt zu bestimmen, null, wenn Es gibt eine aktive Sitzung. Wenn ja, können Sie es dann ungültig machen, und Sie können auch überprüfen request.isRequestedSessionIdValid(), oder überprüfen Sie explizit für das Vorhandensein bestimmter Attribute, die Sie in Ihrem Sitzungsverwaltungsschema verwendet haben. Dadurch können Sie den Status der Sitzung ordnungsgemäß überprüfen.

Von den JavaDocs:

ServletResponse

        void reset()

                Löscht alle Daten, die im Puffer vorhanden sind, sowie den Statuscode und die Header. Wenn die Antwort                 begangen wurde, löst diese Methode eine Illegal.

        Leere invalidate()

                Entwertet diese Sitzung entbindet dann alle daran gebundenen Objekte.

ServletRequest

        boolean isRequestedSessionIdValid()

                prüft, ob der reques Die Sitzungs-ID ist noch gültig.

        Http getSession (boolean erstellen)

                Gibt den aktuellen Http mit dieser Anforderung zugeordnet oder, wenn es keine aktuelle Sitzung und Erstellen istwahr,
                gibt eine neue Sitzung.Wenn create istfalse und die Anfrage hat keine gültige HttpSession, diese Methode gibt null zurück.
                Um sicherzustellen, dass die Sitzung ordnungsgemäß gewartet wird, können Sie diese Methode aufrufen müssen, bevor die Antwort verpflichtet.
                wird mit Hilfe von Cookies Sitzung Integrität zu erhalten und aufgefordert wird, eine neue Sitzung zu erstellen, wenn die Antwort                 verpflichtet ist, wird eine Illegal geworfen.

Verwandte Themen