import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
spring framework高危漏洞
import java.util.Map;
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;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.t.support.SpringBeanAutowiringSupport;
import com.gsww.jzfp.util.JsonParser;
import com.gsww.jzfp.util.StringHelper;
public class ParameterFilter implements Filter {
private Logger log = Logger(getClass());
public void init(FilterConfig filterConfig) throws ServletException {
log.info("Initializing filter 'ParameterFilter'");
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(ServletContext());
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) request).getSession();
HttpServletRequest _request = (HttpServletRequest) request;
String path = _ServletPath();
HttpServletRequest req=(HttpServletRequest)request; 
HttpServletResponse res=(HttpServletResponse)response; 
//获得所有请求参数名 
Enumeration params = ParameterNames(); 
String ctxpath = ContextPath();
String sql = ""; 
while (params.hasMoreElements()) { 
//得到参数名 
String name = Element().toString(); 
//            System.out.println("name===========================" + name + "--"); 
//得到参数对应值 
String[] value = ParameterValues(name); 
for (int i = 0; i < value.length; i++) {
//            System.out.println("value===========================" + value[i] + "--"); 
sql = sql + value[i]; 
}
//        System.out.println(sql);
//        sql = StringHelper.characterWord(sql);
//        sql = StringHelper.escapeExprSpecialWord(sql);
if (this.isSQLOrScript(sql)) { 
//if(!this.isAjax(req)){
log.debug("传入的参数存在非法字符!");
this.dispatchLoginPage(request, response, "参数存在非法字符!");
//}else{
//          this.initContentResponse(res);
/
/          res.setContentType("application/json;charset=utf-8");
//          res.setStatus(404);
//}
} else { 
chain.doFilter(request, response);
}
//      chain.doFilter(request, response);
}
public void destroy() {
}
/**
*
* @Title: dispat
chLoginPage
* @Description: 跳转到登录页面并提示信息
* @return String    返回类型
*/
private void dispatchLoginPage(ServletRequest request,ServletResponse response,String msg){
String url = ServletContext().getContextPath()+"/login.jsp";
}
/**
* @description 初始化响应reponse的信息,对于非跳转响应
* @return void
* @throws 初始化失败
*/
private void initContentResponse(HttpServletResponse response) {
// 设置响应不缓存
response.setHeader("Cache-Control", "no-cache");
// 设置响应和请求都不缓存
response.setHeader("Cache-Control", "no-store");
// 设置文档的过期时间,而不缓存它
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache");
response.setCharacterEncoding("UTF-8");
}
/**
* 判断是否SQL注入
* @param fileExt
* @return
*/
private static boolean isSQLOrScript(String str){
str = LowerCase();//统一转为小写 
String badStr = "net user|xp_cmdshell|/add|exec master.dbo.xp_cmdshell|" +
"net localgroup administrators|select|count|asc|mid|insert|" +
"delete from|drop table|update|truncate|" +
"from|%|javascript|script|";
String inj_stra[] = badStr.split("\\|");
for (int i=0 ; i <inj_stra.length ; i++ ){
if (str.indexOf(inj_stra[i])>=0){
return true;
}
}
return false;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。