"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo modificar los parámetros de solicitud con un filtro de servlet cuando están prohibidos los cambios en el código fuente?

¿Cómo modificar los parámetros de solicitud con un filtro de servlet cuando están prohibidos los cambios en el código fuente?

Publicado el 2024-12-21
Navegar:288

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

Modificar el parámetro de solicitud con filtro de servlet

En una aplicación web existente, te enfrentas a una vulnerabilidad XSS y tienes prohibido modificar la fuente código. Para solucionar este problema, pretende utilizar un filtro de servlet para desinfectar los parámetros de solicitud antes de que lleguen a la página vulnerable.

El ejemplo de código proporcionado demuestra su clase de filtro, 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) {
  }
}

Sin embargo, ha encontrado un obstáculo: HttpServletRequest carece del método setParameter. Para superar esta limitación, considere los siguientes enfoques:

Uso de HttpServletRequestWrapper:

Utilice la clase HttpServletRequestWrapper para crear un contenedor alrededor de la solicitud original. Puede anular el método getParameter para devolver el valor desinfectado. Luego, pase la solicitud envuelta a chain.doFilter en lugar del original.

Este enfoque requiere subclasificación y envuelve la solicitud original, pero cumple con la API del servlet al delegar el filtrado a la solicitud envuelta.

Configuración del atributo de solicitud:

Como alternativa, puede modificar el servlet de destino o JSP para esperar un atributo de solicitud en lugar de un Solicitar parámetro para el parámetro peligroso. Luego, su filtro puede examinar el parámetro, desinfectarlo y establecer el atributo de solicitud con el valor desinfectado usando request.setAttribute.

Este método es más elegante ya que evita la subclasificación o la suplantación de identidad, pero requiere modificaciones en el código de la aplicación. utilizar el atributo de solicitud en lugar del parámetro.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3