• XSS过滤处理


    package com.jyc.common.filter;

    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import javax.servlet.ReadListener;
    import javax.servlet.ServletInputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    import org.apache.commons.io.IOUtils;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.MediaType;
    import com.jyc.common.utils.StringUtils;
    import com.jyc.common.utils.html.EscapeUtil;

    /**
    * XSS过滤处理
    *
    * @author jianyongchao
    */
    public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
    {
    /**
    * @param request
    */
    public XssHttpServletRequestWrapper(HttpServletRequest request)
    {
    super(request);
    }

    @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++)
    {
    // xss攻击和过滤前后空格
    escapseValues[i] = EscapeUtil.clean(values[i]).trim();
    }
    return escapseValues;
    }
    return super.getParameterValues(name);
    }

    @Override
    public ServletInputStream getInputStream() throws IOException
    {
    // json类型,直接返回
    if (!isJsonRequest())
    {
    return super.getInputStream();
    }

    // 为空,直接返回
    String json = IOUtils.toString(super.getInputStream(), "utf-8");
    if (StringUtils.isEmpty(json))
    {
    return super.getInputStream();
    }

    // xss过滤
    json = EscapeUtil.clean(json).trim();
    final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes("utf-8"));
    return new ServletInputStream()
    {
    @Override
    public boolean isFinished()
    {
    return true;
    }

    @Override
    public boolean isReady()
    {
    return true;
    }

    @Override
    public void setReadListener(ReadListener readListener)
    {
    }

    @Override
    public int read() throws IOException
    {
    return bis.read();
    }
    };
    }

    /**
    * 是否是Json请求
    *
    * @param request
    */
    public boolean isJsonRequest()
    {
    String header = super.getHeader(HttpHeaders.CONTENT_TYPE);
    return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE);
    }
    }
  • 相关阅读:
    Python---Flask--08--Flask-Ckeditor
    Python---Flask--07--SQLAlchemy基本关系
    Python---Flask--06--分页的实现
    Python---Flask--05--g对象和钩子函数
    maven项目管理构建
    POI 设置
    http状态码
    hibernate框架之-查询结果集返回类型
    Struts2框架之-注解开发
    Struts2框架之-Struts2的标签
  • 原文地址:https://www.cnblogs.com/qq3245792286/p/15469606.html
Copyright © 2020-2023  润新知