"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-12-21
Parcourir:919

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 illustre votre classe de filtre, XssFilter :

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) {
  }
}

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 qu'il attende un attribut de requête plutôt que 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3