Protection des pages de modèle de couche de vue interne dans les applications de servlet

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai une question très élémentaire sur les applications Web MVC en Java.

Depuis l’époque des JSP brutes jusqu’aux technologies actuelles telles que Seam, la répartition interne du contrôleur qui a initialement accepté la demande à la couche de vue qui crée la sortie à envoyer au client a toujours été un motif fondamental.

Cette répartition interne est généralement effectuée (bien que le mécanisme puisse être masqué par une couche supplémentaire de configuration) en demandant au conteneur de servlet une nouvelle ressource à l'aide d'une URL. Le mappage de ces URL est effectué par le même fichier web.xml qui définit également le fichier "réel". URL vers l'extérieur.

À moins que des mesures spéciales ne soient prises, il est souvent possible d’accéder directement au calque de vue. Observez le Seam " registration " démo, où vous pouvez contourner & register; register.seam " et allez directement à "registered.xhtml". C'est un problème de sécurité potentiel. À tout le moins, il fuit le code source du modèle de vue.

Je suis conscient qu'il ne s'agit que d'un exemple d'application de base, mais il est également étrange que des mesures supplémentaires soient nécessaires pour déclarer ces ressources internes invisibles à l'extérieur.

Quel est le moyen le plus simple de limiter les points d'entrée d'URL?

Existe-t-il quelque chose du type "WEB-INF"? répertoire, un composant de chemin d’URL magique auquel on ne peut accéder que par des requêtes internes?

Était-ce utile?

La solution 4

J'ai maintenant vu quelques applications qui placent leur JSP interne dans WEB-INF / jsp . Cela semble faire l'affaire, du moins pour JSP et également pour Velocity. Il ne semble pas fonctionner pour JSF , cependant.

Autres conseils

Vous pouvez empêcher l'accès aux ressources internes en utilisant un security-constraint dans votre descripteur de déploiement web.xml .

Par exemple, j'utilise la configuration suivante pour empêcher un accès direct aux 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>

Je ne recommanderais pas d'autoriser les requêtes Internet à accéder directement à votre serveur d'applications. Je jetterais un serveur Web devant, puis dans celui-ci, autoriserais la demande de certains types d'URL. Vous ne voulez pas que les gens aillent sur foo.com/jsps? Restreignez-le une fois pour toutes.

Il y a un peu de conversation sur le sujet ici: cache les pages derrière WEB-INF?

Une solution consiste à créer un filtre de servlet qui examine le chemin de requête de chaque requête et gère chaque requête en conséquence. Voici un lien qui pourrait vous aider à démarrer, Pages JavaServer (JSP) et JSTL - Contrôle d'accès avec JSP

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top