2010-06-14 6 views
6

Je corrige quelques vieux défauts et dans le cadre d'un défaut, je dois m'assurer que certaines demandes sont seulement POST à ​​la page de JSP au lieu d'une demande de GET. L'application a un formulaire qui soumet des données à une autre page JSP (je sais que c'est faux et contre MVC mais trop tard pour le réparer), puisqu'il s'agit d'une page JSP, donc nous pouvons poster la demande sinon nous pouvons obtenir la requête. Dans le cas d'un utilisateur malveillant, peut lire le formulaire et envoyer la demande en tant que GET à partir du navigateur comme http://host:80/somejsp.jsp?param=value&param=value etc. Dans ce cas, il devient une violation. Je dois m'assurer que de telles demandes GET ne sont pas traitées. Une façon de faire est d'effectuer les étapes ci-dessous dans la page jsp -Comment désactiver les requêtes GET à la page JSP?

if (request.getMethod().equals("GET")) { 
    // reroute the user as it is not a valid req 
} 

Y at-il un autre moyen de le faire?

Répondre

8

Deux solutions:

  1. Ajouter un <security-constraint> avec un <auth-constraint> vide sur un <url-pattern> de *.jsp et <http-method> de GET qui bloque GET requêtes sur les fichiers JSP à tout le monde (comme suggéré par McDowell):

    <security-constraint> 
        <display-name>Restrict GET requests on JSP files</display-name> 
        <web-resource-collection> 
         <web-resource-name>JSP files</web-resource-name> 
         <url-pattern>*.jsp</url-pattern> 
         <http-method>GET</http-method> 
        </web-resource-collection> 
        <auth-constraint /> 
    </security-constraint> 
    
  2. Créer un Filter qui écoute sur un <url-pattern> de *.jsp et fait essentiellement ce qui suit dans la méthode doFilter().

    if (((HttpServletRequest) request).getMethod().equals("GET")) { 
        ((HttpServletResponse) response).sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); 
    } else { 
        chain.doFilter(request, response); 
    } 
    

Pas besoin de copypaste le même sur toutes les pages JSP qui seraient uniquement sujettes à des erreurs IllegalStateException: response already committed.

1

Ajoutez security constraints à votre fichier web.xml pour interdire la requête.

+0

Dans mon cas, les utilisateurs sont déjà authentifiés. Nous voulons quand même empêcher les pages JSP de répondre aux requêtes GET. – Shamik

Questions connexes