web-dev-qa-db-ja.com

Tomcatサーブレットでjsessionidを無効にすることは可能ですか?

TomcatのURLでjsessionidをオフにすることは可能ですか? jsessionidは検索エンジンにやさしくないようです。

67
Roy Chan

このフィルターを使用して、検索エンジンのみを無効にすることができますが、検索エンジンにやさしいだけではなく、すべての応答に使用することをお勧めします。特定のセキュリティの悪用に使用できるセッションIDを公開します( 詳細 )。

Tomcat 6(6.0.30より前)

tuckey rewrite filter を使用できます。

configの例 Tuckeyフィルターの場合:

<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以降)

コンテキスト設定で disableURLRewriting を使用して、この動作を無効にできます。

Tomcat 7およびTomcat 8

Tomcat 7以降 から、セッション設定に以下を追加できます。

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>
67
Pool
 <session-config>
     <tracking-mode>COOKIE</tracking-mode>
 </session-config> 

Tomcat 7およびTomcat 8は、web-app web.xmlで上記の構成をサポートします。これにより、URLベースのセッションが無効になります。

50
Spektr

Tomcat 6.0では、disableURLRewritingを使用してこれを行うことができます。

http://Tomcat.Apache.org/Tomcat-6.0-doc/config/context.html

例えば.

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

Tomcat 7.0では、これはアプリケーション内で次のように制御されます:ServletContext.setSessionTrackingModes()

Tomcat 7.0は、Servlet 3.0仕様に従います。

19
Doug

FilterをラップするすべてのURLでresponseを使用します。HttpServletResponseWrapperは、encodeRedirectUrlencodeRedirectURLencodeUrlおよびencodeURL

13
Andrew Duffy

プールの答えから引用:

Tuckey rewriteフィルターを使用できます。

このフィルターを使用して、検索エンジンのみを無効にすることができますが、検索エンジンが使いにくいよりも悪いため、すべての応答に使用することをお勧めします。特定のセキュリティエクスプロイトに使用できるセッションIDを公開します(詳細)。

Jsessionidが表示されなくなっても、これによりCookieベースのセッション処理が許可されることに注意してください。 (彼の他の投稿から: web.xmlでHttpSessionをオフにできますか?

PS。私はコメントするのに十分な評判がありません。そうでなければ、これをコメントとして彼の投稿に追加したでしょう。

5
Andreas

Tomcat 6.0では、Tomcatインストールの/ configパスからcontext.xmlにdisableURLRewriting = "true"を使用できます。

http://Tomcat.Apache.org/Tomcat-6.0-doc/config/context.html

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>

...

これで、Tomcatは検索エンジンに優しい出力を出力します...

楽しい

4
myset

デフォルトでは、TomcatサーバーでCookieが有効になっています(server.xmlの要素でcookies = trueを使用して明示的に設定できます)。 Cookieを有効にすると、セッションはCookieを使用して管理されるため、jsessionIDはURLに追加されません。ただし、cookieが有効になった後でも、cookieが有効になっているかどうかはWebサーバーがその段階ではわからないため、jsessionIDが最初の要求のURLに追加されます。このようなjsessionIDを削除するには、tuckey書き換えルールを使用できます。

これについての詳細は 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>

これについての詳細は http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-Java.html で見つけることができます。

2
techwiz

Tomcatの前にApacheがある場合は、mod_rewriteフィルターでjsessionを取り除くことができます。

Apache構成に次を追加します。

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

これにより、jsessionidのないページへの301リダイレクトが行われます。明らかにこれはURL jsessionidを完全に無効にしますが、これは私が必要としたものです。

乾杯、マーク

2
Mark Lynch