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.
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