Vra

Na die lees van Jeff se blog post op Jou koekies Beskerming: HttpOnly . Ek wil graag om te implementeer HttpOnly koekies in my web-program.

Hoe kan jy tomcat vertel om te gebruik http net koekies vir sessies?

Was dit nuttig?

Oplossing

httpOnly ondersteun as van Tomcat 6.0.19 en Tomcat 5.5.28.

Sien die changelog inskrywing vir fout 44382.

Die laaste kommentaar fout 44382 state, "hierdie is toegepas op 5.5.x en sal ingesluit word in 5.5.28 en verder. " Dit beteken egter nie voorkom asof 5.5.28 vrygestel is.

Die httpOnly funksie kan geaktiveer word vir alle webapps in conf / context.xml :

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

My interpretasie is dat dit werk ook vir 'n individu konteks deur dit op die gewenste Konteks inskrywing in conf / server.xml ( op dieselfde wyse as hierbo).

Ander wenke

  

Update: Die JSESSIONID dinge hier is   net vir ouer houers. Gebruik asseblief   JT se oomblik aanvaar antwoord nie, tensy   jy gebruik

Wanneer die opstel van koekies in jou app, gebruik

response.setHeader( "Set-Cookie", "name=value; HttpOnly");

Maar in baie webapps, die belangrikste koekie is die sessie identifiseerder, wat outomaties deur die houer as die JSESSIONID koekie is ingestel.

As jy net hierdie koekie te gebruik, kan jy 'n ServletFilter te skryf weer het die koekies op die pad uit, dwing JSESSIONID om HttpOnly. Die bladsy by http://keepitlocked.net/archive /2007/11/05/java-and-httponly.aspx http: //alexsmolen.com/blog/?p=16 dui die toevoeging van die volgende in 'n filter.

if (response.containsHeader( "SET-COOKIE" )) {
  String sessionid = request.getSession().getId();
  response.setHeader( "SET-COOKIE", "JSESSIONID=" + sessionid 
                      + ";Path=/<whatever>; Secure; HttpOnly" );
} 

maar wel dat hierdie alle koekies te vervang en net ingestel wat jy hier noem in hierdie filter.

As jy bykomende koekies gebruik om die JSESSIONID koekie, dan sal jy nodig het om hierdie kode om al die koekies in die filter stel uit te brei. Dit is nie 'n goeie oplossing in die geval van meervoudige koekies, maar is 'n miskien 'n aanvaarbare quick-fix vir die JSESSIONID-net die opstel van.

Let asseblief daarop dat as jou kode ontwikkel met verloop van tyd, is daar 'n nare verborge fout wag vir jou wanneer jy vergeet van hierdie filter en probeer stel 'n ander koekie elders in jou kode. Natuurlik sal dit nie kry stel.

Dit is regtig 'n hak al. As jy Tomcat gebruik nie en kan dit saam te stel, neem dan 'n blik op 'n uitstekende voorstel Shabaz se pleister HttpOnly ondersteuning in Tomcat.

Let asseblief versigtig wees om nie die oorskryf "; beveilig" koekie vlag in https-sessies. Hierdie vlag verhoed dat die leser van die stuur van die koekie oor 'n ongeënkripteerde http verband, basies die lewering van die gebruik van https vir ligitieme versoeke nutteloos.

private void rewriteCookieToHeader(HttpServletRequest request, HttpServletResponse response) {
    if (response.containsHeader("SET-COOKIE")) {
        String sessionid = request.getSession().getId();
        String contextPath = request.getContextPath();
        String secure = "";
        if (request.isSecure()) {
            secure = "; Secure"; 
        }
        response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid
                         + "; Path=" + contextPath + "; HttpOnly" + secure);
    }
}

Vir sessie koekies dit lyk nie of nog ondersteun in Tomcat. Sien die fout raport Moet ondersteuning te bied vir HTTPOnly sessie koekie parameter . 'N ietwat betrokke werk rondom vir nou kan gevind hier , wat basies neerkom op die hand lap Tomcat. Kan nie regtig vind 'n maklike manier om dit te doen op hierdie oomblik by hierdie punt Ek is bang vir.

Om die som werk rondom, dit behels die aflaai van die 5.5 bron en dan verander die bron in die volgende plekke:

org.apache.catalina.connector.Request.java

//this is what needs to be changed
//response.addCookieInternal(cookie);

//this is whats new
response.addCookieInternal(cookie, true);
}

org.apache.catalina.connectorResponse.addCookieInternal

public void addCookieInternal(final Cookie cookie) {
addCookieInternal(cookie, false);
}

public void addCookieInternal(final Cookie cookie, boolean HTTPOnly) {

if (isCommitted())
return;

final StringBuffer sb = new StringBuffer();
//web application code can receive a IllegalArgumentException
//from the appendCookieValue invokation
if (SecurityUtil.isPackageProtectionEnabled()) {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run(){
ServerCookie.appendCookieValue
(sb, cookie.getVersion(), cookie.getName(),
cookie.getValue(), cookie.getPath(),
cookie.getDomain(), cookie.getComment(),
cookie.getMaxAge(), cookie.getSecure());
return null;
}
});
} else {
ServerCookie.appendCookieValue
(sb, cookie.getVersion(), cookie.getName(), cookie.getValue(),
cookie.getPath(), cookie.getDomain(), cookie.getComment(),
cookie.getMaxAge(), cookie.getSecure());
}
//of course, we really need to modify ServerCookie
//but this is the general idea
if (HTTPOnly) {
sb.append("; HttpOnly");
}

//if we reached here, no exception, cookie is valid
// the header name is Set-Cookie for both "old" and v.1 ( RFC2109 )
// RFC2965 is not supported by browsers and the Servlet spec
// asks for 2109.
addHeader("Set-Cookie", sb.toString());

cookies.add(cookie);
}

As jou webbediener ondersteun Serlvet 3.0 spec, soos Tomcat 7.0 +, kan jy hieronder gebruik in web.xml as:

<session-config>
  <cookie-config>
     <http-only>true</http-only>        
     <secure>true</secure>        
  </cookie-config>
</session-config>

Soos genoem in dokumente:

  

HttpOnly : spesifiseer of enige sessie dop koekies geskep deur   hierdie web-program sal gemerk word as HttpOnly

     

Veilige : Spesifiseer   of enige sessie dop koekies wat deur hierdie web-program   sal gemerk word as veilige selfs al is die aanvraag wat die begin   ooreenstemmende sessie is met behulp van eenvoudige HTTP in plaas van HTTPS

U word verwys na href="https://stackoverflow.com/questions/15510354/how-to-set-httponly-and-session-cookie-for-java-web-appliaction">

ook moet daarop gelet word dat die draai op HttpOnly sal applets wat Stateful toegang terug na die jvm vereis breek.

die Applet http versoeke sal nie gebruik maak van die jsessionid koekie en kan raak aan 'n ander tomcat.

Vir koekies wat ek uitdruklik opstel, ek oorgeskakel na gebruik SimpleCookie verskaf deur Apache Shiro . Dit maak nie erf javax.servlet.http.Cookie so dit neem 'n bietjie meer jongleren te kry alles om korrek te werk maar dit beteken 'n eiendom stel HttpOnly voorsien en dit werk met Servlet 2.5.

Vir die opstel van 'n koekie op 'n reaksie, eerder as om te doen response.addCookie(cookie) moet jy cookie.saveTo(request, response) doen.

In Tomcat6, Jy kan voorwaardelik in staat te stel van jou HTTP Luisteraar Klas:

public void contextInitialized(ServletContextEvent event) {                 
   if (Boolean.getBoolean("HTTP_ONLY_SESSION")) HttpOnlyConfig.enable(event);
}

Die gebruik van hierdie klas

import java.lang.reflect.Field;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import org.apache.catalina.core.StandardContext;
public class HttpOnlyConfig
{
    public static void enable(ServletContextEvent event)
    {
        ServletContext servletContext = event.getServletContext();
        Field f;
        try
        { // WARNING TOMCAT6 SPECIFIC!!
            f = servletContext.getClass().getDeclaredField("context");
            f.setAccessible(true);
            org.apache.catalina.core.ApplicationContext ac = (org.apache.catalina.core.ApplicationContext) f.get(servletContext);
            f = ac.getClass().getDeclaredField("context");
            f.setAccessible(true);
            org.apache.catalina.core.StandardContext sc = (StandardContext) f.get(ac);
            sc.setUseHttpOnly(true);
        }
        catch (Exception e)
        {
            System.err.print("HttpOnlyConfig cant enable");
            e.printStackTrace();
        }
    }
}

Ek het gevind dat in OWASP

<session-config>
  <cookie-config>
    <http-only>true</http-only>
  </cookie-config>
</session-config>

Dit word ook op te los vir "httponlycookies in config" sekuriteit probleem

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top