Author: markt
Date: Sat Jun 13 20:26:43 2009
New Revision: 784463

URL: http://svn.apache.org/viewvc?rev=784463&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=44382
Port httpOnly support from 6.0.x

Modified:
    
tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java
    tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/Context.java
    
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Request.java
    
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Response.java
    
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardContext.java
    tomcat/container/tc5.5.x/webapps/docs/changelog.xml
    tomcat/container/tc5.5.x/webapps/docs/config/context.xml

Modified: 
tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java?rev=784463&r1=784462&r2=784463&view=diff
==============================================================================
--- 
tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java 
(original)
+++ 
tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java 
Sat Jun 13 20:26:43 2009
@@ -284,7 +284,8 @@
                                           String domain,
                                           String comment,
                                           int maxAge,
-                                          boolean isSecure )
+                                          boolean isSecure,
+                                          boolean isHttpOnly)
     {
         StringBuffer buf = new StringBuffer();
         // Servlet implementation checks name
@@ -350,6 +351,10 @@
           buf.append ("; Secure");
         }
         
+        // HttpOnly
+        if (isHttpOnly) {
+            buf.append("; HttpOnly");
+        }
         headerBuf.append(buf);
     }
 

Modified: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/Context.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/Context.java?rev=784463&r1=784462&r2=784463&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/Context.java 
(original)
+++ 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/Context.java 
Sat Jun 13 20:26:43 2009
@@ -181,8 +181,24 @@
      */
     public void setCookies(boolean cookies);
 
+    /**
+     * Gets the value of the use HttpOnly cookies for session cookies flag.
+     * 
+     * @return <code>true</code> if the HttpOnly flag should be set on session
+     *         cookies
+     */
+    public boolean getUseHttpOnly();
+
 
     /**
+     * Sets the use HttpOnly cookies for session cookies flag.
+     * 
+     * @param useHttpOnly   Set to <code>true</code> to use HttpOnly cookies
+     *                          for session cookies
+     */
+    public void setUseHttpOnly(boolean useHttpOnly);
+    
+    /**
      * Return the "allow crossing servlet contexts" flag.
      */
     public boolean getCrossContext();

Modified: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Request.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Request.java?rev=784463&r1=784462&r2=784463&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Request.java
 (original)
+++ 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Request.java
 Sat Jun 13 20:26:43 2009
@@ -2237,7 +2237,7 @@
             Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME,
                                        session.getIdInternal());
             configureSessionCookie(cookie);
-            response.addCookie(cookie);
+            response.addCookieInternal(cookie, context.getUseHttpOnly());
         }
 
         if (session != null) {

Modified: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Response.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Response.java?rev=784463&r1=784462&r2=784463&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Response.java
 (original)
+++ 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/connector/Response.java
 Sat Jun 13 20:26:43 2009
@@ -932,6 +932,17 @@
      * @param cookie Cookie to be added
      */
     public void addCookie(final Cookie cookie) {
+        addCookieInternal(cookie, false);
+    }
+
+    /**
+     * Add the specified Cookie to those that will be included with
+     * this Response.
+     *
+     * @param cookie    Cookie to be added
+     * @param httpOnly  Should the httpOnly flag be set on this cookie
+     */
+    public void addCookieInternal(final Cookie cookie, final boolean httpOnly) 
{
 
         if (isCommitted())
             return;
@@ -950,7 +961,8 @@
                         (sb, cookie.getVersion(), cookie.getName(), 
                          cookie.getValue(), cookie.getPath(), 
                          cookie.getDomain(), cookie.getComment(), 
-                         cookie.getMaxAge(), cookie.getSecure());
+                         cookie.getMaxAge(), cookie.getSecure(),
+                         httpOnly);
                     return null;
                 }
             });
@@ -958,7 +970,7 @@
             ServerCookie.appendCookieValue
                 (sb, cookie.getVersion(), cookie.getName(), cookie.getValue(),
                      cookie.getPath(), cookie.getDomain(), 
cookie.getComment(), 
-                     cookie.getMaxAge(), cookie.getSecure());
+                     cookie.getMaxAge(), cookie.getSecure(), httpOnly);
         }
 
         // if we reached here, no exception, cookie is valid

Modified: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardContext.java?rev=784463&r1=784462&r2=784463&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardContext.java
 (original)
+++ 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardContext.java
 Sat Jun 13 20:26:43 2009
@@ -656,6 +656,10 @@
      */
     private boolean saveConfig = true;
 
+    /**
+     * The flag that indicates that session cookies should use HttpOnly
+     */
+    private boolean useHttpOnly = false;
 
     // ----------------------------------------------------- Context Properties
 
@@ -1045,6 +1049,33 @@
                                    new Boolean(this.cookies));
 
     }
+    
+    /**
+     * Gets the value of the use HttpOnly cookies for session cookies flag.
+     * 
+     * @return <code>true</code> if the HttpOnly flag should be set on session
+     *         cookies
+     */
+    public boolean getUseHttpOnly() {
+        return useHttpOnly;
+    }
+
+
+    /**
+     * Sets the use HttpOnly cookies for session cookies flag.
+     * 
+     * @param useHttpOnly   Set to <code>true</code> to use HttpOnly cookies
+     *                          for session cookies
+     */
+    public void setUseHttpOnly(boolean useHttpOnly) {
+        boolean oldUseHttpOnly = this.useHttpOnly;
+        this.useHttpOnly = useHttpOnly;
+        support.firePropertyChange("useHttpOnly",
+                new Boolean(oldUseHttpOnly),
+                new Boolean(this.useHttpOnly));
+    }
+    
+    
 
 
     /**

Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?rev=784463&r1=784462&r2=784463&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Sat Jun 13 20:26:43 2009
@@ -87,6 +87,10 @@
         <bug>42707</bug>: Make adding a host alias via JMX take effect
         immediately. (markt)
       </fix>
+      <add>
+         <bug>44382</bug>: Add support for using httpOnly for session cookies.
+         This is disabled by default. (markt/fhanik)
+      </add>
       <fix>
         <bug>45576</bug>: JAAS Realm now works with DIGEST authentication.
         (markt)

Modified: tomcat/container/tc5.5.x/webapps/docs/config/context.xml
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/config/context.xml?rev=784463&r1=784462&r2=784463&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/config/context.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/config/context.xml Sat Jun 13 
20:26:43 2009
@@ -235,6 +235,13 @@
         implementation class that will be used for servlets managed by this
         Context.  If not specified, a standard default value will be used.</p>
       </attribute>
+      
+      <attribute name="useHttpOnly" required="false">
+       <p>Should the HttpOnly flag be set on session cookies to prevent client
+          side script from accessing the session ID? Defaults to
+          <code>false</code>.</p>
+      </attribute>
+      
 
     </attributes>
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to