"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como modificar parâmetros de solicitação com um filtro de servlet quando alterações no código-fonte são proibidas?

Como modificar parâmetros de solicitação com um filtro de servlet quando alterações no código-fonte são proibidas?

Publicado em 2024-12-21
Navegar:941

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

Modificar parâmetro de solicitação com filtro de servlet

Em um aplicativo da web existente, você está enfrentando uma vulnerabilidade XSS e está proibido de modificar a origem código. Para resolver esse problema, você pretende utilizar um filtro de servlet para limpar os parâmetros de solicitação antes que eles cheguem à página vulnerável.

O exemplo de código fornecido demonstra sua classe 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) {
  }
}

No entanto, você encontrou um obstáculo: HttpServletRequest não possui o método setParameter. Para superar essa limitação, considere as seguintes abordagens:

Usando HttpServletRequestWrapper:

Utilize a classe HttpServletRequestWrapper para criar um wrapper em torno da solicitação original. Você pode substituir o método getParameter para retornar o valor limpo. Em seguida, passe a solicitação agrupada para chain.doFilter em vez do original.

Essa abordagem requer subclasse e agrupa a solicitação original, mas está em conformidade com a API do servlet, delegando a filtragem à solicitação agrupada.

Definindo o atributo de solicitação:

Como alternativa, você pode modificar o servlet de destino ou JSP para esperar um atributo de solicitação em vez do que um parâmetro de solicitação para o parâmetro perigoso. Seu filtro pode então examinar o parâmetro, higienizá-lo e definir o atributo de solicitação com o valor higienizado usando request.setAttribute.

Este método é mais elegante, pois evita subclasses ou falsificação, mas requer modificações no código do aplicativo para usar o atributo request em vez do parâmetro.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3