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

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

黄舟
Libérer: 2018-05-28 15:03:16
original
2987 Les gens l'ont consulté

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 <>" ' & 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>
Copier après la connexion

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() {  
        }  
    }
Copier après la connexion

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);  
        }  
          
    }
Copier après la connexion

À 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal