Java 防SQL注入过滤器代码

前言

浅谈SQL注入:
       所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,达到一定的非法用途。


解决办法

1、配置WEB-INF/web.xml

<web-app>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
	
	<!-- 防SQL注入过滤 -->
	<filter>  
        <filter-name>SqlInjectFilter</filter-name>  
        <filter-class>com.seesun2012.web.core.filter.SqlInjectFilter</filter-class>  
		<!-- 过滤前台传入的参数,可手动添加或删减,以“|”分割 -->
		<init-param>
			<param-name>sqlInjectStrList</param-name>
			<param-value>'|or|and|;|-|--|+|,|like|//|/|*|%|#</param-value>
		</init-param>
    </filter>
    <filter-mapping>  
        <filter-name>SqlInjectFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
	</filter-mapping>
	
</web-app>

2、过滤器SqlInjectFilter.java类

package com.seesun2012.web.core.filter;

import java.io.IOException;
import java.util.Enumeration;

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;

/**
 * SQL注入过滤器
 * @author CSDN:seesun2012
 * @version 0.0.1-SNAPSHOT
 * @Date 2018-01-14
 */
public class SqlInjectFilter implements Filter{
	
	public FilterConfig config;

	@Override
	public void destroy() {
		this.config = null;
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest httprequest = (HttpServletRequest) request;
		// 获得所有请求参数名
		Enumeration<?> params = httprequest.getParameterNames();
		String sql = "";
		while (params.hasMoreElements()) {
			// 得到参数名
			String name = params.nextElement().toString();
			// 得到参数对应值
			String[] value = httprequest.getParameterValues(name);
			for (int i = 0; i < value.length; i++) {
				sql = sql + value[i];
			}
		}
		// 过滤掉的SQL关键字,可以手动添加
		String sqlInjectStrList = config.getInitParameter("sqlInjectStrList");
		if (sqlValidate(sql, sqlInjectStrList)) {	
			throw new IOException("请输入有效字符");
			// 重定向或跳转,略...
		} else {
			chain.doFilter(request, response);
		}
	}
	      
	// 校验SQL
	protected static boolean sqlValidate(String str, String sqlInjectStrList) {
		// 统一转为小写
		str = str.toLowerCase();
		// 转换为数组
		String[] badStrs = sqlInjectStrList.split("\\|");
		for (int i = 0; i < badStrs.length; i++) {
			// 检索
			if (str.indexOf(badStrs[i]) >= 0) {
				return true;
			}
		}
		return false;
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		config = filterConfig;
	}

}


备注


























注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!


持续更新中…

如有对思路不清晰或有更好的解决思路,欢迎与本人交流,QQ群:273557553,个人微信:
你遇到的问题是小编创作灵感的来源!


于2024年4月-2025年9月期间,研究团队在贵州习水国家级自然保护区制定39条样线,涵盖灌木林、常绿阔叶林、针叶林、常绿落叶阔叶混交林、针阔混交林等不同植被类型,每条样线分春夏秋冬4个季节采集样品,用真菌采集软件记录经纬度、海拔、采集地点、时间、生境等信息,使用佳能相机(R6 mark Ⅱ)对大型真菌进行拍照,并采集标本,标本存放于贵州省生物研究所大型真菌标本馆(HGAMF)。 通过形态学初步鉴定,结合分子生物学最终鉴定,参考已]报道的中国毒蘑菇名录开展毒蘑菇的认定。 调查到保护区内有毒真菌7目25科64种,导致中毒的主要类型有急性肾衰竭型、神经精神型和胃肠炎型。最终形成贵州习水国家级自然保护区大型有毒真菌图片数据集,它由以下2个部分组成。 (1)附件1包含78张原始照片(.JPG),照片名字包括了大型有毒真菌的拉丁名和中文名,若无中文名的直接用拉丁名。 (2)附件2是一个压缩文件,包含了2张工作表,其中一张表是大型有毒真菌39条样线的信息,另一张表是大型有毒真菌的中毒类型。 照片采用佳能相机R6 mark Ⅱ拍摄,物种鉴定通过多种文献核实,并经两位以上专家鉴定确认。该数据集可为研究地及周边的普通人识别有毒大型真菌提供参考,通过及时的图片对比,能有效避免误采误食大型有毒真菌,同时为因误食大型真菌可能引发的身体损伤进行了总结,能为患者及时治疗提供参考。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值