java web 敏感字符过滤器

本文介绍了一种用于防止SQL注入攻击的过滤器实现方法。该过滤器通过正则表达式匹配请求参数中的敏感字符,并将其替换为指定字符串,从而有效避免SQL注入风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class ParamsFilter implements Filter {
/** 敏感字符 */
String regEx="(SELECT|select)";

/** 替换字符串 */
String replaceStr = "**";

@Override
public void destroy() {
// TODO Auto-generated method stub


}


@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
Pattern p = Pattern.compile(regEx);
HttpServletRequest request = (HttpServletRequest) arg0;
HashMap paramterMap = new HashMap(request.getParameterMap());

/** 过滤敏感字符 */
Enumeration enu = request.getParameterNames();  
while(enu.hasMoreElements()){  
String paraName = (String)enu.nextElement();  
if(paramterMap.get(paraName) != null){
try {
String vs[] = (String[]) paramterMap.get(paraName);
for(int i = 0;i < vs.length ; i++){
String v = vs[i];
if(v != null ) v = v.toLowerCase();
Matcher m = p.matcher(v);
v = m.replaceAll(replaceStr).trim();
vs[i] = v;
}
paramterMap.put(paraName, vs);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


ParameterRequestWrapper wrapRequest=new ParameterRequestWrapper(request , paramterMap);
chain.doFilter(wrapRequest, arg1);
}


@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub


}

}





public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params;


public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
// TODO Auto-generated constructor stub
}


public Map getParameterMap() {
return params;
}


public Enumeration getParameterNames() {
Vector l = new Vector(params.keySet());
return l.elements();
}


public String[] getParameterValues(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
return (String[]) v;
} else if (v instanceof String) {
return new String[] { (String) v };
} else {
return new String[] { v.toString() };
}
}


public String getParameter(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
return strArr[0];
} else {
return null;
}
} else if (v instanceof String) {
return (String) v;
} else {
return v.toString();
}
}


}



web.xml

<filter>
<filter-name>ParamsFilter</filter-name>
<filter-class>com.filter.ParamsFilter</filter-class>
</filter>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值