Wie konfigurieren Sie den HttpOnly-cookies im tomcat / java-webapps?
Nach der Lektüre von Jeff ' s blog-post auf Schützen Sie Ihre Cookies HttpOnly. Ich würde gerne umsetzen HttpOnly-cookies in meinem web-Anwendung.
Wie sagen Sie tomcat verwenden nur http cookies für sessions?
Du musst angemeldet sein, um einen Kommentar abzugeben.
httpOnly unterstützt der Tomcat-6.0.19 und Tomcat 5.5.28.
Sehen die changelog Eintrag für bug-44382.
Den letzten Kommentar zum bug Vier und vierzig tausend drei hundert zwei und achtzig Staaten, "diese wurde angewandt, um 5.5.x und in 5.5.28 ab." Jedoch erscheint es nicht, dass 5.5.28 veröffentlicht wurde.
Das httpOnly-Funktionalität aktiviert werden kann, der für alle webapps in conf/context.xml:
Meine interpretation ist, dass es funktioniert auch für einen individuellen Kontext, indem es auf die gewünschte Kontext Eintrag in conf/server.xml (in der gleichen Weise, wie oben).
Set-Cookie=
JSESSIONID=25E8F...; Path=/custompath; HttpOnly mycustomcookie1=xxxxxxx; Path=/ mycustomcookie2=1351101062602; Path=/ mycustomcookie3=0; Path=/ mycustomcookie4=1; Path=/; Secure mycustomcookie5=4000; Expires=Sat, 22-Oct-2022 17:51:02 GMT; Path=/ alles, was ich falsch mache?Wenn das setzen von cookies in Ihrer app verwenden
Jedoch in vielen webapps, die wichtigsten cookie wird die session-id, die automatisch durch den container als JSESSIONID cookie.
Wenn Sie nur verwenden dieses cookie, können Sie schreiben einen ServletFilter zur re-legen Sie die cookies auf dem Weg nach draußen, zwingt JSESSIONID zum HttpOnly. Auf der Seite im
http://keepitlocked.net/archive/2007/11/05/java-and-httponly.aspxhttp://alexsmolen.com/blog/?p=16 schlägt das hinzufügen des folgenden in einem filter.aber beachten Sie, dass dieser Befehl überschreibt alle cookies und nur einstellen, was Sie hier angeben, in dieser filter.
Wenn Sie verwenden weitere cookies, um das JSESSIONID-cookie, dann wirst du verlängern müssen Sie diesen code, um alle cookies in den filter. Das ist keine tolle Lösung, im Fall von multiple-cookies, aber ist vielleicht eine akzeptable quick-fix für das JSESSIONID-nur setup.
Bitte beachten Sie, dass der code im Laufe der Zeit entwickelt, es gibt eine böse versteckte Fehler warten, wenn Sie vergessen, über diese filter und versuchen Sie es und legen Sie noch ein Plätzchen irgendwo in Ihrem code. Natürlich, es wird nicht festgelegt.
Dies ist wirklich ein hack, aber. Wenn Sie Tomcat verwenden und zusammenstellen kann, dann werfen Sie einen Blick auf Shabaz ausgezeichneten Vorschlag zu patch HttpOnly Unterstützung in Tomcat.
Bitte seien Sie vorsichtig, nicht zu überschreiben ";secure" cookie-flag in https-Sitzungen. Dieses flag verhindert, dass der browser sendet die cookie werden über eine unverschlüsselte http-Verbindung, die im Grunde die Darstellung der Verwendung von https für legitime Anfragen sinnlos.
request.isSecure()
ist nicht immer richtig. Betrachten Sie eine Lastenausgleichs-Knoten hinter der LB führt, dass die SSL-Beschleunigung. Die Anfrage vom browser an den load balancer wird über HTTPS, während die Anforderung zwischen load-balancer und den eigentlichen server kommen über plain HTTP. Dies wird im Ergebnisrequest.isSecure()
wirdfalse
, während der browser mit SSL.Für session-cookies, es scheint nicht unterstützt zu werden in der Tomcat noch nicht. Siehe bug-report Hinzufügen der Unterstützung für HTTPOnly-session-cookie parameter. Eine etwas beteiligt zu arbeiten, um für jetzt finden hier, die im Grunde läuft manuell zu patchen Tomcat. Kann nicht wirklich einen einfachen Weg finden, es zu tun in diesem moment an diesem Punkt bin ich affraid.
Zusammenfassung der work-around geht es um den Download der 5.5 Quelle, und ändern Sie dann die Quelle in der folgenden Orte:
org.apache.catalina.connector.Request.java
org.apache.catalina.connectorResponse.addCookieInternal
Wenn Ihr web-server unterstützt Serlvet 3.0-Spezifikation, wie tomcat 7.0+, die Sie verwenden können unten in
web.xml
als:Wie bereits in docs:
Entnehmen Sie bitte wie setzen httponly-und session-cookie für java-web-Anwendung
es sollte auch darauf hingewiesen werden, dass ein einschalten HttpOnly brechen applets erfordern stateful-Zugang zurück auf die jvm.
das Applet http-Anfragen wird nicht die jsessionid cookie und kann zugewiesen werden, um eine andere tomcat.
Für cookies dass ich explizit einstellen, ich wechselte zu verwenden SimpleCookie zur Verfügung gestellt von Apache Shiro. Es nicht erbt von javax.- servlet.http.Cookie, so dass es erfordert ein wenig jonglieren, um alles einwandfrei zu arbeiten, jedoch bietet es eine Eigenschaft HttpOnly set und es funktioniert mit Servlet 2.5.
Für das setzen eines Cookies auf eine Antwort, anstatt
response.addCookie(cookie)
Sie tun müssencookie.saveTo(request, response)
.In Tomcat6, kann Man bedingt aktivieren von HTTP-Listener-Klasse:
Verwendung dieser Klasse
Fand ich in OWASP
dies ist auch fix für "httponlycookies in der config" security Problem