Integrado springboot evitar ataques XSS

1. Os dados de configuração

Configuração no arquivo de configuração

# Ataques Prevent XSS 
XSS: 
  # Interruptor Filtro 
  Ativado: a verdadeiros 
  # excluir link (s separados por vírgulas) 
  exclui: / System / Observação / * 
  # correspondentes ligação 
  urlPatterns: sistema / / *, / monitor / *, / ferramenta / *

2. classe de configuração do filtro de gravação

importação java.util.Map;
importação javax.servlet.DispatcherType;
importação org.springframework.beans.factory.annotation.Value;
importação org.springframework.boot.web.servlet.FilterRegistrationBean;
importação org.springframework.context.annotation.Bean;
importação org.springframework.context.annotation.Configuration;
importação com.google.common.collect.Maps;
importação com.ruoyi.common.utils.StringUtils;
importação com.ruoyi.common.xss.XssFilter; 

/ ** 
 * Filtro配置
 * 
 * @author xxx
  * / 
@Configuration 
pública  classeFilterConfig 
{ 
    @value ( "$ {xss.enabled}" )
     privada de Cordas habilitado; 

    @Value ( "$ {xss.excludes}" )
     privadas exclui corda; 

    @Value ( "$ {xss.urlPatterns}" )
     privadas urlPatterns de corda; 

    @SuppressWarnings ({ "rawtypes", "desmarcada" }) 
    @Bean 
    pública FilterRegistrationBean xssFilterRegistration () 
    { 
        registro FilterRegistrationBean = new FilterRegistrationBean ();
        //
        registration.setDispatcherTypes (DispatcherType.REQUEST);
        // 过滤器类(继承Filter) 
        registration.setFilter ( novo XssFilter ());
        //
         registration.addUrlPatterns (StringUtils.split (urlpatterns, "" ));
        //
         registration.setName ( "xssFilter" );
        //
         registration.setOrder (Integer.MAX_VALUE); 
        Mapa <String, String> initParameters = Maps.newHashMap (); 
        initParameters.put ( "exclui" , exclui); 
        initParameters.put ( "ativado" , ativado);
        // Filtrar初始化参数
        registration.setInitParameters (initParameters);
        voltar registo; 
    } 
}

3. Escrevendo Filtros

importação Java.io.IOException;
importação java.util.ArrayList;
importação java.util.List;
importação java.util.regex.Matcher;
importação java.util.regex.Pattern;
importação javax.servlet.Filter;
importação javax.servlet.FilterChain;
importação javax.servlet.FilterConfig;
importação javax.servlet.ServletException;
importação javax.servlet.ServletRequest;
importação javax.servlet.ServletResponse;
importação javax.servlet.http.HttpServletRequest;
importação javax.servlet.http.HttpServletResponse;
importação com.ruoyi.common.utils.StringUtils;

/ ** 
 * filtros evitar ataques XSS 
 * 
 * @author XXX
  * / 
público  classe XssFilter os implementos do Filtro 
{ 
    / ** 
     * excluir ligação 
     * / 
    público List <string> = exclui new new ArrayList <> (); 

    / ** 
     * XSS interruptor do filtro 
     * / 
    público  booleana Enabled = false ; 

    @Override 
    pública  vazio o init (a FilterConfig FilterConfig) lança ServletException 
    { 
        Cordas tempExcludes = filterConfig.getInitParameter ( "exclui"); 
        Cordas tempEnabled = filterConfig.getInitParameter ( "ativado" );
        se (StringUtils.isNotEmpty (tempExcludes)) 
        { 
            String [] url = tempExcludes.split ( "" );
            para ( int i = 0; url =! nula && i <url.length; i ++ ) 
            { 
                excludes.add (url [i]); 
            } 
        } 
        Se (StringUtils.isNotEmpty (tempEnabled)) 
        { 
            activado = Boolean.valueOf (tempEnabled); 
        } 
    } 

    @Override
    público  vazio doFilter (ServletRequest pedido, a resposta ServletResponse, FilterChain cadeia)
             lança IOException, ServletException 
    { 
        HttpServletRequest req = pedido (HttpServletRequest); 
        HttpServletResponse resp = (HttpServletResponse) resposta;
        se (handleExcludeURL (req, respectivamente)) 
        { 
            chain.doFilter (pedido, resposta); 
            retornar ; 
        } 
        XssHttpServletRequestWrapper xssRequest = novo (pedido (HttpServletRequest)) XssHttpServletRequestWrapper; 
        chain.doFilter (xssRequest, resposta);
    } 

    Private  booleanhandleExcludeURL (HttpServletRequest pedido, HttpServletResponse resposta) 
    { 
        se (! ativada) 
        { 
            retornar  verdadeiro ; 
        } 
        Se (exclui == nulo || excludes.isEmpty ()) 
        { 
            return  false ; 
        } 
        String url = request.getServletPath ();
        para (String padrão: exclui) 
        { 
            padr P = Pattern.compile ( "^" + padrão); 
            Equiparador m = p.matcher (URL);
            E se (m.find ()) 
            { 
                retornar  verdadeiro ; 
            } 
        } 
        Retornar  falsa ; 
    } 

    @Override 
    pública  vazio destroy () 
    { 

    } 
}

classe 3.XssHttpServletRequestWrapper

importação javax.servlet.http.HttpServletRequest;
importação javax.servlet.http.HttpServletRequestWrapper;
importação org.jsoup.Jsoup;
importação org.jsoup.safety.Whitelist; 

/ ** 
 * XSS过滤处理
 * 
 * @author xxx
  * / 
público  classe XssHttpServletRequestWrapper estende HttpServletRequestWrapper 
{ 
    / ** 
     * @param pedido
      * / 
    público XssHttpServletRequestWrapper (HttpServletRequest pedido) 
    { 
        super (request); 
    } 

    @Override 
    públicaString [] getParameterValues (String nome) 
    { 
        String [] valores = super- .getParameterValues (nome);
        se (valores =! nula ) 
        { 
            int length = values.length; 
            String [] escapseValues = novo String [] de comprimento;
            para ( int i = 0; i <comprimento; i ++ ) 
            { 
                // 防xss攻击和过滤前后空格 
                escapseValues [i] = Jsoup.clean (valores de [i], Whitelist.relaxed ()) da guarnição ().; 
            } 
            Retornar escapseValues; 
        }
        retornar  de super .getParameterValues (nome); 
    } 
}

Isso completa! !

Acho que você gosta

Origin www.cnblogs.com/deityjian/p/12518369.html
Recomendado
Clasificación