• 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);
    }
    }
  • 相关阅读:
    实验二 (一) 大小写英文字母表
    JAVA的8种基本数据类型和类型转换
    我的第一个Java程序
    Max Factor 2710 最大的合数的质数因子
    计算质数的各种算法
    Java中instanceof与getClass的区别
    web网页测试用例(非常实用)
    数据库之删除表数据drop、truncate和delete的用法
    解决:Gitlab的developer角色的人没有push权限无法提交(转)
    java后台发送请求并获取返回值(续)
  • 原文地址:https://www.cnblogs.com/qq3245792286/p/15469606.html
Copyright © 2020-2023  润新知