zoukankan      html  css  js  c++  java
  • 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);
    }
    }
  • 相关阅读:
    谷歌浏览器离线安装
    C语言restrict关键字的使用
    Win32编程中radiobutton的分组
    在SourceForge中建立开源项目
    [转载]Linux解压缩命令
    [转载]vim配置文件
    解决VC6在win7下打开文件崩溃问题
    gson解析复杂的json数据
    catch中return语句的执行时间
    踏出了学习clojure的第一步
  • 原文地址:https://www.cnblogs.com/qq3245792286/p/15469606.html
Copyright © 2011-2022 走看看