Ist es möglich, jsessionid im Tomcat-Servlet zu deaktivieren?

68

Ist es möglich, jsessionid in der URL in Tomcat auszuschalten? Die jsessionid scheint nicht zu suchmaschinenfreundlich zu sein.

Roy Chan
quelle

Antworten:

68

Sie können diesen Filter nur für Suchmaschinen deaktivieren, aber ich würde empfehlen , ihn für alle Antworten zu verwenden, da er schlimmer ist als nur Suchmaschinen unfreundlich. Es zeigt die Sitzungs-ID an, die für bestimmte Sicherheits-Exploits verwendet werden kann ( weitere Informationen ).

Tomcat 6 (vor 6.0.30)

Sie können den Tuckey-Rewrite-Filter verwenden .

Beispielkonfiguration für Tuckey-Filter:

<outbound-rule encodefirst="true">
  <name>Strip URL Session ID's</name>
  <from>^(.*?)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$</from>
  <to>$1$2$3</to>
</outbound-rule>

Tomcat 6 (6.0.30 und höher)

Sie können disableURLRewriting in der Kontextkonfiguration verwenden, um dieses Verhalten zu deaktivieren.

Tomcat 7 und Tomcat 8

Ab Tomcat 7 können Sie in der Sitzungskonfiguration Folgendes hinzufügen.

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>
Schwimmbad
quelle
6
Warum einen Umschreiber verwenden, wenn Sie einfach kein Sitzungscookie erstellen können?
BT
1
Bitte beachten Sie das Datum für diese Antwort. Tomcat 7 und die Tracking-Modus-Funktion waren 2009 nicht verfügbar. Jetzt mit Versionsinformationen aktualisiert.
Pool
Tomcat 6 unterstützt das Attribut 'disableURLRewriting' für das Context-Element, das dies tut. Siehe tomcat.apache.org/tomcat-6.0-doc/config/context.html
Danke, dies wurde in Tomcat 6.0.30 hinzugefügt. Ich werde die Antwort erneut aktualisieren.
Pool
51
 <session-config>
     <tracking-mode>COOKIE</tracking-mode>
 </session-config> 

Tomcat 7 und Tomcat 8 unterstützen die obige Konfiguration in Ihrer Web-App web.xml, wodurch URL-basierte Sitzungen deaktiviert werden.

Spektr
quelle
3
Vergessen Sie nicht, web-app_3.0 xsd: <web-app xmlns: xsi = " w3.org/2001/XMLSchema-instance " xmlns = " java.sun.com/xml/ns/javaee " xmlns : web zu verwenden = " java.sun.com/xml/ns/javaee/web-app_3_0.xsd " xsi: schemaLocation = " java.sun.com/xml/ns/javaee java.sun.com/xml/ns/javaee/web- app_3_0.xsd "id =" CHANGEME "version =" 3.0 ">
koppor
19

In Tomcat 6.0 ist dies möglich mit: disableURLRewriting

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

z.B

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="PATH_TO_WEBAPP" path="/CONTEXT" disableURLRewriting="true">
</Context>

In Tomcat 7.0 wird dies in einer Anwendung wie folgt gesteuert: ServletContext.setSessionTrackingModes ()

Tomcat 7.0 folgt den Servlet 3.0-Spezifikationen.

Doug
quelle
13

Verwenden Sie ein Filterfür alle URLs , die die Packungen responsein einem , HttpServletResponseWrapperdie einfach die URL aus unverändert zurückgibt encodeRedirectUrl, encodeRedirectURL, encodeUrlund encodeURL.

Andrew Duffy
quelle
3
Beispielcode finden Sie hier: randomcoder.com/articles/jsessionid-considered-harmful Der Server ist möglicherweise ausgefallen . Ich musste es aus Googles Cache holen.
Dan Fabulich
5

Zitat aus Pools Antwort:

Sie können den Tuckey-Rewrite-Filter verwenden.

Sie können diesen Filter nur für Suchmaschinen deaktivieren, aber ich würde empfehlen, ihn für alle Antworten zu verwenden, da er schlimmer ist als nur Suchmaschinenunfreundlich. Es zeigt die Sitzungs-ID an, die für bestimmte Sicherheits-Exploits verwendet werden kann (weitere Informationen).

Es ist erwähnenswert, dass dies weiterhin die Behandlung von Sitzungen auf Cookie-Basis ermöglicht, obwohl die jsessionid nicht mehr sichtbar ist. (aus seinem anderen Beitrag: Kann ich die HttpSession in web.xml deaktivieren? )

PS. Ich habe nicht genug Ruf, um einen Kommentar abzugeben, sonst hätte ich ihn als Kommentar zu seinem obigen Beitrag hinzugefügt.

Andreas
quelle
4

In Tomcat 6.0 können Sie disableURLRewriting = "true" in context.xml aus Ihrem / config-Pfad Ihrer Tomcat-Installation verwenden.

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

Datei context.xml

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context disableURLRewriting="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

</Context>

...

Jetzt Tomcat-Ausgabe ist es suchmaschinenfreundlich ...

Genießen

myset
quelle
2

Auch wenn Sie Apache vor Tomcat haben, können Sie die jsession mit einem mod_rewrite-Filter entfernen.

Fügen Sie Ihrer Apache-Konfiguration Folgendes hinzu.

#Fix up tomcat jsession appending rule issue
RewriteRule  ^/(.*);jsessionid=(.*) /$1 [R=301,L]

Dadurch wird eine 301-Umleitung zu einer Seite ohne die jsessionid durchgeführt. Natürlich wird dies die URL von jsessionid vollständig deaktivieren, aber das ist es, was ich brauchte.

Prost, Mark

Mark Lynch
quelle
2

Standardmäßig sind Cookies auf dem Tomcat-Server aktiviert (Sie können sie explizit festlegen, indem Sie cookies = true im Element server.xml verwenden). Das Aktivieren von Cookies bedeutet, dass jsessionID nicht an URLs angehängt wird, da die Sitzung mithilfe von Cookies verwaltet wird. Selbst nachdem Cookies aktiviert wurden, werden jsessionIDs für die erste Anforderung an die URL angehängt, da der Webserver zu diesem Zeitpunkt nicht weiß, ob Cookies aktiviert wurden. Um solche jsessionIDs zu entfernen, können Sie tuckey rewrite-Regeln verwenden:

Weitere Informationen hierzu finden Sie unter http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html

<outbound-rule encodefirst="true">
    <note>Remove jsessionid from embedded urls - for urls WITH query parameters</note>
    <from>^/(.*);jsessionid=.*[?](.*)$</from>
    <to encode="false">/$1?$2</to>
</outbound-rule>

<outbound-rule encodefirst="true">
    <note>Remove jsessionid from embedded urls - for urls WITHOUT query parameters</note>
    <from>^/(.*);jsessionid=.*[^?]$</from>
    <to encode="false">/$1</to>
</outbound-rule>

Weitere Informationen hierzu finden Sie unter http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html

techwiz
quelle
Beachten Sie, dass für den Webbrowser weiterhin Cookies aktiviert sein müssen.
BalusC