2010-02-16 5 views
8

Sembra una domanda stupida a cui la risposta sarebbe "Non utilizzare encodeURL()!" ma sto lavorando con un codebase che utilizza i tag di ancoraggio netui nei JSP e ho bisogno di disabilitare la scrittura di JSESSIONID negli URL in quanto è un rischio per la sicurezza.Come configurare Tomcat per non codificare l'ID di sessione nell'URL quando viene richiamato HttpServletResponse.encodeURL()

In WebLogic, è possibile configurarlo configurando url-riscrittura-abilitato in weblogic.xml (lo so perché ho scritto quella funzione nel server WebLogic!). Tuttavia, non riesco a trovare un'opzione di configurazione equivalente per Tomcat.

+0

Se si considera avere l'ID di sessione sul URL, un rischio per la sicurezza, quindi come si fa a meno delle stesse informazioni in un cookie? – skaffman

+2

Si potrebbe (inavvertitamente/accidentalmente) copypaste un URL con 'jsessionid' dalla barra degli indirizzi e darlo a qualcun altro. L'altro, sia in modo inconsapevole o volgare e con cattive intenzioni, potrebbe richiedere la pagina con questo URL come se fosse l'utente originale. Con i cookie, 'jsessionid' non è direttamente visibile all'utente finale. Vedi anche http://en.wikipedia.org/wiki/Session_fixation – BalusC

+0

Questo non suona come sicurezza, è più un problema di sicurezza. Se la sicurezza contro gli exploit è la preoccupazione, sicuramente un cookie non è più sicuro di un URL riscritto. – skaffman

risposta

5

Nessuna impostazione viene in mente. Ma questo è abbastanza facile da fare con la creazione di un primo ingresso Filter ascolto sulla url-pattern di interesse (forse /*?) E sostituisce la ServletResponse da un'implementazione HttpServletResponseWrapper dove il encodeURL() restituisce lo stesso ragionamento indietro non modificato.

Kickoff esempio:

public void doFilter(ServletRequest request, ServletResponse response) throws ServletException, IOException { 
    chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) { 
     public String encodeURL(String url) { 
      return url; 
     } 
    }); 
} 
+3

Picchiami ... ricorda, tuttavia, ci sono 4 metodi di riscrittura dell'URL nella risposta, alcuni o tutti che potrebbero aver bisogno di "disabilitare". – skaffman

+2

corretto. 2 di essi sono tuttavia deprecati (che terminano in "Url" anziché in "URL"). L'altro che potresti voler sovrascrivere è il 'encodeRedirectURL()'. Vedi anche http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletResponse.html#encodeRedirectURL%28java.lang.String%29 – BalusC

+0

Grazie! Questo è esattamente quello che ho fatto per Tomcat e posso confermare che funziona. –

9

Tomcat 6 supporta l'attributo disableURLRewriting che può essere impostato per true nel vostro elemento Contesto:

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

+1

Un'altra proprietà da considerare è httpOnly, che impedisce agli script sul lato client di accedere all'ID di sessione. –

+0

Se si utilizza http e non https e si è impostato secure = "true" sul connettore tomcat, l'impostazione disableURLRewriting su true non funzionerà. – yeaske

Problemi correlati