2012-03-13 12 views
12

La mia applicazione Spring Web MVC esistente ha il seguente gestore di gestori nel controller.Spring MVC application filtering HTML in URL - Si tratta di un problema di sicurezza?

@RequestMapping(method = RequestMethod.GET, value = "/welcome") 

Attivo la seguente richiesta http://www.example.com/welcome e funziona correttamente.

Il problema è

http://www.example.com/welcome.check.blah 

funziona anche !!!

Inoltre, un URL di richiesta HTTP GET all'applicazione con tag di script viene visualizzato nuovamente anche se non riesce l'autorizzazione.

L'esempio http://www.example.com/welcome<script>alert("hi")</script> viene visualizzato di nuovo come tale nella finestra del browser e come risultato della mia logica di autorizzazione viene visualizzato il messaggio "Non autorizzato".

Mi chiedo se questo è un problema di sicurezza e dovrei aver bisogno di fare qualsiasi codifica/filtro nel codice?

risposta

14

Questo comportamento è dovuto alla possibilità useSuffixPatternMatch che è vero per default all'interno del RequestMappingHandlerMapping (suppongo si utilizza Spring MVC 3.1).

useSuffixPatternMatch: se utilizzare partita modello di suffisso ("*") in caso di corrispondenza modelli alle richieste. Se abilitato, un metodo associato a "/ users" corrisponde anche a "/users.*". Il valore predefinito è "true".

Per impostare useSuffixPatternMatch-falso, il modo più semplice è quello di utilizzare @Configuration:

@Configuration 
@EnableWebMvc 
public class Api extends WebMvcConfigurationSupport { 

    @Override 
    public RequestMappingHandlerMapping requestMappingHandlerMapping() { 
     RequestMappingHandlerMapping mapping = super.requestMappingHandlerMapping(); 
     mapping.setUseSuffixPatternMatch(false); 
     return mapping; 
    } 

} 
+0

Grazie per aver segnalato il useuffixPatternMatch. Ci proveremo. Avete degli input sull'altro punto? È un problema di sicurezza? impediamo al browser di visualizzare nuovamente l'URL come inserito? – Raghav

+0

L'ho testato e sì l'URL è stato nuovamente visualizzato ma il tag

1

Quando si utilizza Primavera di richiedere una mappatura di quel tipo (vale a dire "/ niente") Primavera in realtà mappe controller per diversi URL:

/ammessi
/welcome.*
/welcome/

per evitare questo - o essere più specifico quando si RequestMapping (cioè /welcome.htm), o manualmente mappa l'URL della periferica nella Xml config:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="/welcome">YourControllerBean</prop> 
      </props> 
     </property> 
</bean> 


Cheers, Pete

+0

Grazie per la risposta. Ma sto già usando la mappatura del gestore delle richieste basata su annotazioni e non posso usare il suffisso ".htm" :( – Raghav

1

È anche possibile limitare questo in web.xml menzionando il modello URL. Invece di dare "/ ", puoi menzionare "/ .htm" nel tuo web.xml.

Qualcosa di simile

<servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/application/*.htm</url-pattern> 
    </servlet-mapping> 
+0

Purtroppo, non posso farlo. è disponibile nel formato "/ welcome? key = value" e non "/welcome.html" .Questo è stato fatto per mascherare la tecnologia sottostante. – Raghav

+0

Ohh ok..accettabile ... ma a me non rivela nulla tecnologia sottostante piuttosto specifica il modello di URL però ... – raddykrish

2

In attuale configurazione di Spring Java, c'è un modo un po 'più facile da configurare la stessa cosa:

@Configuration 
public class DispatcherConfig extends WebMvcConfigurationSupport { 

    @Override 
    protected void configurePathMatch(PathMatchConfigurer configurer) { 
     configurer.setUseSuffixPatternMatch(false); 
    } 

} 
+0

Grazie per la risposta aggiornata! –

Problemi correlati