import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class SqlInjFilter implements Filter {
private static Log log = LogFactory.getLog(SqlInjFilter.class);
private String[] riskStrs = new String[] { "like", "and", "or", "select",
"1=1" };
private String errorPageUrl = "******";
private Map<String, String> riskStrMap = new HashMap<String, String>();
private String charEncoding = "utf-8";
private int maxValueLength = -1;
private int maxParaNum = -1;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String validateStr = reqValidate(req);
if (validateStr != null) {
String sourceIp = req.getRemoteAddr();
String requestURL = req.getRequestURL().toString();
log.error("Sql injection risk, the source ip is " + sourceIp
+ ", the request URL is '" + requestURL
+ "', parameter info: '" + validateStr + "'.");
res.sendRedirect(errorPageUrl);
} else {
chain.doFilter(req, res);
}
}
protected String reqValidate(HttpServletRequest req) throws UnsupportedEncodingException {
req.setCharacterEncoding(charEncoding);
Enumeration params = req.getParameterNames();
int paramCount = 0;
while (params.hasMoreElements()) {
paramCount ++;
if(maxParaNum != -1 && paramCount > maxParaNum)
{
return "parameter is to much,over max Parameter Number " + maxParaNum;
}
String name = params.nextElement().toString();
String[] values = req.getParameterValues(name);
for (String value : values) {
if (maxValueLength != -1 && value.length() > maxValueLength) {
return "the value of '" + name
+ "'is too big, the length is " + value.length();
}
if (isSqlSnippet(value)) {
return name + ":" + value;
}
}
}
return null;
}
protected boolean isSqlSnippet(String str) {
if (str == null || str.trim().length() == 0)
return false;
str = str.trim().toLowerCase();
StringTokenizer strTokenizer = new StringTokenizer(str);
while (strTokenizer.hasMoreTokens()) {
if (riskStrMap.containsKey(strTokenizer.nextToken())) {
return true;
}
}
return false;
}
public void init(FilterConfig filterConfig) throws ServletException {
//characterEncoding
String characterEncoding = filterConfig.getInitParameter("characterEncoding");
if (characterEncoding != null && characterEncoding.trim() != "") {
charEncoding = characterEncoding;
}
// risk string
String riskPattern = filterConfig.getInitParameter("riskPattern");
if (riskPattern != null && riskPattern.trim() != "") {
riskStrs = riskPattern.trim().split("\\|");
}
for (String riskStr : riskStrs) {
riskStrMap.put(riskStr, "");
}
// error page
String errorUrl = filterConfig.getInitParameter("errorPageUrl");
if (errorUrl != null && errorUrl.trim() != "") {
errorPageUrl = errorUrl.trim();
}
// maxValueLength
String valueLength = filterConfig.getInitParameter("maxValueLength");
if (valueLength != null && valueLength.trim() != "") {
maxValueLength = new Integer(valueLength).intValue();
}
// max paraNum
String paraNum = filterConfig.getInitParameter("maxParaNum");
if (paraNum != null && paraNum.trim() != "") {
maxParaNum = new Integer(paraNum).intValue();
}
}
public void destroy() {
}
}
分享到:
相关推荐
C# MVC 过滤器防止SQL注入
外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免!...外网可能会被攻击,简单的处理可以避免!...
java防sql注入攻击过滤器 filter
java web 过滤器防止Xss、sql注入,基于spring boot 2.0框架开发。
防止sql注入过滤器配置,
下面小编就为大家带来一篇JSP使用过滤器防止SQL注入的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
配置在web.xml中,可以防止SQL注入,可以自己定义一些需要过滤的特殊字符
防止sql注入的url过滤器,这个平时用到过得、觉得不错、所以跟大家分享下、
防止sql注入的url过滤器,简单配置即可!
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的...下面这篇文章主要给大家介绍了关于防止SQL注入的5种方法,教大家有效的防止sql注入,需要的朋友可以参考学习。
一、什么是XSS攻击 ...三、过滤器配置 web.xml配置 <filter-name>XssFilter <filter-class>com.xxx.Filter.XssFilter</filter-class> <filter-name>XssFilter <url-pattern>/* </filter-mapping>
下面小编就为大家带来一篇java 过滤器filter防sql注入的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ASP-ISAPI通用防注入过滤器 是一个基于IIS系统的组件,其拥有强大的防ASP注入功能.能在ASP程序本身存在注入漏洞的情况下防御注入攻击。同时它还具备防数据库下载、防止数据库扩展名被修改为asp后插入ASP语句攻击等...
-- 防止SQL注入的过滤器 --> 72 <filter> 73 <filter-name>antiSqlInjection</filter-name> 74 <filter-class>com.tarena.dingdang.filter.AntiSqlInjectionfilter</filter-class> 75 </filter> 76 ...
主要介绍了C#防SQL注入代码的三种方法,有需要的朋友可以参考一下
java过滤器,XSS : 跨站脚本攻击(Cross Site Scripting),SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
使用简单的JSON从MySQL查询,并防止SQL注入攻击 例子 querier = require 'mysql-querier' userQuerier = querier 'users', user_id: number: true role: enum: ['admin', 'user'] app.get '/user/query', (req, ...
恶意文本检测器,约束验证,查询长度验证和基于文本的密钥生成器是用于检测和防止SQL注入攻击访问数据库的四种过滤技术。 要求 Web应用程序 一台虚拟服务器 测试客户 封包捕获软件 执行 我们正在Ubuntu中进行此项目...