Maison  >  Article  >  Java  >  Exemple d'injection XSS implémentée par HttpServletRequestWrapper en Java

Exemple d'injection XSS implémentée par HttpServletRequestWrapper en Java

黄舟
黄舟original
2018-05-28 15:03:162949parcourir

Voici notre solution dans un projet récent, qui utilise principalement la méthode org.apache.commons.lang3.StringEscapeUtils.escapeHtml4() du package commons-lang3-3.1.jar.

Le processus de solution implique principalement deux étapes : la saisie utilisateur et l'affichage de la sortie : échapper aux caractères spéciaux tels que a8093152e673feb7aba1828c43532094" ' & pendant la saisie et utiliser la méthode fn:excapeXml("fff") de jstl pendant la sortie.

Parmi eux, le filtrage lors de la saisie est implémenté par un filtre

Processus de mise en œuvre :

Ajouter un filtre dans web.xml

    <filter>  
            <filter-name>XssEscape</filter-name>  
            <filter-class>cn.pconline.morden.filter.XssFilter</filter-class>  
        </filter>  
        <filter-mapping>  
            <filter-name>XssEscape</filter-name>  
            <url-pattern>/*</url-pattern>  
            <dispatcher>REQUEST</dispatcher>  
        </filter-mapping>

Le. L'implémentation de XssFilter consiste à implémenter l'interface Filter du servlet

    package cn.pconline.morden.filter;  
      
    import java.io.IOException;  
      
    import javax.servlet.Filter;  
    import javax.servlet.FilterChain;  
    import javax.servlet.FilterConfig;  
    import javax.servlet.ServletException;  
    import javax.servlet.ServletRequest;  
    import javax.servlet.ServletResponse;  
    import javax.servlet.http.HttpServletRequest;  
      
    public class XssFilter implements Filter {  
          
        @Override  
        public void init(FilterConfig filterConfig) throws ServletException {  
        }  
      
        @Override  
        public void doFilter(ServletRequest request, ServletResponse response,  
                FilterChain chain) throws IOException, ServletException {  
            chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);  
        }  
      
        @Override  
        public void destroy() {  
        }  
    }

La clé est l'implémentation de XssHttpServletRequestWrapper, hériter du HttpServletRequestWrapper du servlet et réécrire les méthodes correspondantes qui peuvent provoquer des attaques xss, telles que :

    package cn.pconline.morden.filter;  
      
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletRequestWrapper;  
      
    import org.apache.commons.lang3.StringEscapeUtils;  
      
    public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {  
      
        public XssHttpServletRequestWrapper(HttpServletRequest request) {  
            super(request);  
        }  
      
        @Override  
        public String getHeader(String name) {  
            return StringEscapeUtils.escapeHtml4(super.getHeader(name));  
        }  
      
        @Override  
        public String getQueryString() {  
            return StringEscapeUtils.escapeHtml4(super.getQueryString());  
        }  
      
        @Override  
        public String getParameter(String name) {  
            return StringEscapeUtils.escapeHtml4(super.getParameter(name));  
        }  
      
        @Override  
        public String[] getParameterValues(String name) {  
            String[] values = super.getParameterValues(name);  
            if(values != null) {  
                int length = values.length;  
                String[] escapseValues = new String[length];  
                for(int i = 0; i < length; i++){  
                    escapseValues[i] = StringEscapeUtils.escapeHtml4(values[i]);  
                }  
                return escapseValues;  
            }  
            return super.getParameterValues(name);  
        }  
          
    }

À ce stade, le filtrage des entrées est terminé

Lors de l'affichage des données sur la page, utilisez simplement fn:escapeXml() pour détecter où les vulnérabilités XSS peuvent se produire. sortie.

Nous analyserons les problèmes spécifiques en détail

De plus, si vous ne souhaitez pas afficher le contenu filtré, vous pouvez utiliser la méthode StringEscapeUtils.unescapeHtml4(). les caractères échappés par StringEscapeUtils.escapeHtml4()

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn