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