2010-06-07 7 views
11

Ich versuche, die Httponly-Flagge auf dem JSESSIONID Cookie zu setzen. Ich arbeite jedoch in Java EE 5 und kann setHttpOnly() nicht verwenden. Zuerst habe ich versucht, meinen eigenen JSESSIONID-Cookie innerhalb doPost() des Servlets zu erstellen, indem ich response.setHeader() verwende.Einstellung Httponly in JSESSIONID Cookie (Java EE 5)

Wenn das nicht funktioniert, habe ich versucht, response.addHeader(). Das hat auch nicht funktioniert. Dann lernte ich, dass das Servlet die Umwandlung der Sitzung in einen JSESSIONID-Cookie übernahm und in den http-Header einfügte. Wenn ich also mit diesem Cookie spielen möchte, muss ich einen Filter schreiben. Ich habe einen Filter geschrieben und dort mit setHeader()/addHeader() gespielt, wiederum ohne Erfolg.

Dann habe ich gelernt, dass es einige Flush/Close-Aktion im Antwortobjekt vor dem Filter passiert, also wenn ich die Daten bearbeiten möchte, muss ich HttpServletResponseWrapper erweitern und das an filterChain.doFilter() übergeben. Dies ist getan, aber ich bekomme immer noch keine Ergebnisse. Natürlich mache ich etwas falsch, aber ich weiß nicht was.

Ich bin mir nicht sicher, ob dies überhaupt relevant für die Frage auf der Hand, aber kein HTML-Dokument durch das Servlet an den Browser zurückgegeben wird. Alles, was wirklich passiert, ist, dass einige Objekte gefüllt und in ein JSP-Dokument zurückgegeben werden. Ich gehe davon aus, dass das Session-Objekt in ein JSESSIONID-Cookie umgewandelt und - zusammen mit den der Anfrage hinzugefügten Objekten - in einem http-Header verpackt wird, bevor es an den Browser gesendet wird.

Ich würde gerne einige Codes schreiben, aber ich mag die Möglichkeit auszuschließen, dass meine Schwierigkeiten aus einem Missverständnis zunächst der Theorie stammen.

+0

einige Code hinzugefügt Formatierung weil othe es war ein bisschen eine unnahbare Wall Of Text. Könnte immer noch in Erwägung ziehen, Beispielcode für das zu veröffentlichen, was Sie versucht haben. –

Antwort

10

Da das JSESSIONID Cookie vom servletcontainer verwaltet wird, ist diese Einstellung servletcontainer spezifisch. Es ist unklar, welche Sie verwenden, also ist hier eine zielgerichtete Antwort Apache Tomcat 6.0, so dass Sie wissen, in welche Richtung Sie nach Ihrem Servletcontainer suchen müssen: Sie müssen das useHttpOnly Attribut der Webanwendung <Context> Element auf true setzen.

<Context useHttpOnly="true"> 
    ... 
</Context> 

Auch diese Tomcat documentation über das <Context> Element sehen.

+0

Je mehr ich dieses Thema erkunde, desto mehr merke ich, wie völlig ignorant ich über fast alles bin. Ich verwende JBOSS 4.0, aber von dem, was ich fertig habe, ist JBOSS ein EJB-Container (?). Ich bin mir nicht sicher, welchen Servletcontainer ich verwende. Ich muss wieder posten, wenn ich herausgefunden habe, was mein Servletcontainer ist. – Mythandros

+0

JBoss ist ein Anwendungsserver. Es verwendet Tomcat als Servlet-Container und fügt einige EJB- und andere ausgefallene JavaEE-Funktionen hinzu. Die EJB Geschichte ist hier irrelevant. Dies ist ein HTTP/Servlet-Problem. Übrigens bin ich mir nicht sicher, ob das alte JBoss 4.0 dieses Attribut unterstützt ... Zumindest sind die Anweisungen dieselben wie für Tomcat. – BalusC

+0

Es scheint, als ob nicht einmal JBoss 4.3 dies unterstützt, Sie benötigen 5.0: https: // - Probleme.jboss.org/browse/JBPAPP-3088 –

5

Sie können dies mit Java EE 5 verwenden:

für Java Enterprise Edition-Versionen vor Java EE 6 eine gemeinsame Problemumgehung ist die SET-COOKIE http-Response-Header mit einem Session-Cookie-Wert zu überschreiben, die explizit die anfügt Httponly Flagge:

String sessionid = request.getSession().getId(); 
// be careful overwriting: JSESSIONID may have been set with other flags 
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly"); 

Quelle: https://www.owasp.org/index.php/HttpOnly

ich teste es in einen Filter

Verwandte Themen