`
greenwen
  • 浏览: 216516 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

过滤器防止sql注入

阅读更多


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() {

	}


}
0
4
分享到:
评论

相关推荐

    C# MVC 过滤器防止SQL注入

    C# MVC 过滤器防止SQL注入

    java过滤器防sql注入

    外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免!...外网可能会被攻击,简单的处理可以避免!...

    java防sql注入攻击过滤器

    java防sql注入攻击过滤器 filter

    java web Xss及sql注入过滤器.zip

    java web 过滤器防止Xss、sql注入,基于spring boot 2.0框架开发。

    防止sql注入过滤器配置

    防止sql注入过滤器配置,

    JSP使用过滤器防止SQL注入的简单实现

    下面小编就为大家带来一篇JSP使用过滤器防止SQL注入的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    sql注入Java过滤器

    配置在web.xml中,可以防止SQL注入,可以自己定义一些需要过滤的特殊字符

    防止sql注入的url过滤器

    防止sql注入的url过滤器,这个平时用到过得、觉得不错、所以跟大家分享下、

    防止sql注入的url过滤器【java filter】

    防止sql注入的url过滤器,简单配置即可!

    有效防止SQL注入的5种方法总结

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的...下面这篇文章主要给大家介绍了关于防止SQL注入的5种方法,教大家有效的防止sql注入,需要的朋友可以参考学习。

    预防XSS攻击和SQL注入XssFilter

    一、什么是XSS攻击 ...三、过滤器配置 web.xml配置 &lt;filter-name&gt;XssFilter &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;filter-name&gt;XssFilter &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    java 过滤器filter防sql注入的实现代码

    下面小编就为大家带来一篇java 过滤器filter防sql注入的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    ASP-ISAPI通用防注入过滤器 v1.0

    ASP-ISAPI通用防注入过滤器 是一个基于IIS系统的组件,其拥有强大的防ASP注入功能.能在ASP程序本身存在注入漏洞的情况下防御注入攻击。同时它还具备防数据库下载、防止数据库扩展名被修改为asp后插入ASP语句攻击等...

    java sql注入l

    -- 防止SQL注入的过滤器 --&gt; 72 &lt;filter&gt; 73 &lt;filter-name&gt;antiSqlInjection&lt;/filter-name&gt; 74 &lt;filter-class&gt;com.tarena.dingdang.filter.AntiSqlInjectionfilter&lt;/filter-class&gt; 75 &lt;/filter&gt; 76 ...

    C#防SQL注入代码的三种方法

    主要介绍了C#防SQL注入代码的三种方法,有需要的朋友可以参考一下

    java过滤器,防止XSS、SQL

    java过滤器,XSS : 跨站脚本攻击(Cross Site Scripting),SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

    mysql-querier:使用简单的JSON从MySQL查询,并防止SQL注入攻击

    使用简单的JSON从MySQL查询,并防止SQL注入攻击 例子 querier = require 'mysql-querier' userQuerier = querier 'users', user_id: number: true role: enum: ['admin', 'user'] app.get '/user/query', (req, ...

    Secure-Systems-of-SQL-Injection-Attack:具有SQL注入漏洞的安全系统

    恶意文本检测器,约束验证,查询长度验证和基于文本的密钥生成器是用于检测和防止SQL注入攻击访问数据库的四种过滤技术。 要求 Web应用程序 一台虚拟服务器 测试客户 封包捕获软件 执行 我们正在Ubuntu中进行此项目...

Global site tag (gtag.js) - Google Analytics