Maison > Java > javaDidacticiel > Comment modifier les paramètres d'une requête avec un filtre de servlet lorsque les modifications du code source sont interdites ?

Comment modifier les paramètres d'une requête avec un filtre de servlet lorsque les modifications du code source sont interdites ?

Patricia Arquette
Libérer: 2024-11-05 06:21:02
original
235 Les gens l'ont consulté

How to Modify Request Parameters with a Servlet Filter When Source Code Changes Are Forbidden?

Modifier le paramètre de requête avec le filtre de servlet

Dans une application web existante, vous êtes confronté à une vulnérabilité XSS et il vous est interdit de modifier la source code. Pour résoudre ce problème, vous avez l'intention d'utiliser un filtre de servlet pour nettoyer les paramètres de requête avant qu'ils n'atteignent la page vulnérable.

L'exemple de code fourni montre votre classe de filtre, XssFilter :

<code class="java">import java.io.*;
import javax.servlet.*;

public final class XssFilter implements Filter {

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException
  {
    String badValue = request.getParameter("dangerousParamName");
    String goodValue = sanitize(badValue);
    // Unable to modify parameter using request.setParameter
    chain.doFilter(request, response);
  }

  public void destroy() {
  }

  public void init(FilterConfig filterConfig) {
  }
}</code>
Copier après la connexion

Cependant , vous avez rencontré un obstacle : HttpServletRequest ne dispose pas de la méthode setParameter. Pour surmonter cette limitation, envisagez les approches suivantes :

Utilisation de HttpServletRequestWrapper :

Utilisez la classe HttpServletRequestWrapper pour créer un wrapper autour de la requête d'origine. Vous pouvez remplacer la méthode getParameter pour renvoyer la valeur nettoyée. Ensuite, transmettez la requête encapsulée à chain.doFilter au lieu de l'original.

Cette approche nécessite un sous-classement et encapsule la requête d'origine, mais est conforme à l'API du servlet en déléguant le filtrage à la requête encapsulée.

Définition de l'attribut de requête :

Vous pouvez également modifier le servlet cible ou le JSP pour attendre un attribut de requête plutôt qu'un paramètre de requête pour le paramètre dangereux. Votre filtre peut ensuite examiner le paramètre, le nettoyer et définir l'attribut de requête avec la valeur nettoyée à l'aide de request.setAttribute.

Cette méthode est plus élégante car elle évite le sous-classement ou l'usurpation d'identité, mais nécessite des modifications du code de l'application. pour utiliser l'attribut request au lieu du paramètre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal