Protezione delle pagine dei modelli del livello di visualizzazione interna nelle applicazioni servlet

StackOverflow https://stackoverflow.com/questions/156002

  •  03-07-2019
  •  | 
  •  

Domanda

Ho una domanda basilare sulle applicazioni Web MVC in Java.

Fin dai tempi antichi del JSP grezzo fino alle tecnologie attuali come Seam, un modello molto semplice è sempre stato l'invio interno dal controller che inizialmente ha accettato la richiesta al livello di vista che crea l'output da inviare al client.

Questa spedizione interna viene generalmente eseguita (sebbene il meccanismo possa essere nascosto attraverso un ulteriore livello di configurazione) chiedendo al contenitore servlet una nuova risorsa usando un URL. La mappatura di questi URL viene effettuata dallo stesso web.xml che definisce anche il "reale" URL verso l'esterno.

A meno che non vengano prese misure speciali, è spesso possibile accedere direttamente al livello di visualizzazione direttamente. Testimone di Seam "registrazione" demo, dove puoi bypassare " register.seam " e vai direttamente a " registrati.xhtml " ;. Questo è un potenziale problema di sicurezza. Per lo meno, perde il codice sorgente del modello di visualizzazione.

Sono consapevole che si tratta solo di un'applicazione di esempio di base, ma è anche strano che debbano essere prese misure aggiuntive per dichiarare queste risorse interne invisibili all'esterno.

Qual è il modo più semplice per limitare i punti di ingresso URL?

C'è forse qualcosa come il " WEB-INF " directory, un componente del percorso URL magico a cui è possibile accedere solo da richieste interne?

È stato utile?

Soluzione 4

Ho visto un paio di applicazioni che hanno messo il loro JSP interno in WEB-INF / jsp . Questo sembra fare il trucco, almeno per JSP, e anche per Velocity. non sembra funzionare per JSF , tuttavia.

Altri suggerimenti

Puoi impedire l'accesso alle risorse interne utilizzando un vincolo di sicurezza nel tuo descrittore di distribuzione web.xml .

Ad esempio, utilizzo la seguente configurazione per impedire l'accesso diretto ai JSP:

<!-- Prevent direct access to JSPs. -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>JSP templates</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint/> <!-- i.e. nobody -->
</security-constraint>

Non consiglierei di consentire alle richieste Internet di accedere direttamente al tuo appserver. Avrei lanciato un server web di fronte, quindi in esso, avrei permesso la richiesta di alcuni tipi di URL. Non vuoi che le persone vadano su foo.com/jsps? Limita una volta per tutte lì.

Qui c'è un po 'di conversazione sull'argomento: nascondere pagine dietro WEB-INF?

Un modo per gestirlo sarebbe costruire un filtro servlet che esamina il percorso della richiesta di ogni richiesta e gestisce di conseguenza ogni richiesta. Ecco un link che potrebbe aiutarti a iniziare, JavaServer Pages (JSP) e JSTL - Controllo degli accessi con JSP

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top