`
流浪鱼
  • 浏览: 1692673 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

防止sql注入

    博客分类:
  • java
 
阅读更多

我们在开发系统的时候,总是要防止sql注入的,下面是我采用过滤器方式来阻止sql注入的,感觉效率很慢的,所以各位有好的方式请推荐。

过滤器代码:

package com.zbxsoft.uct.auth;

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;
import javax.servlet.http.HttpServletResponse;

import com.zbxsoft.tools.LogUtil;
import com.zbxsoft.tools.StrUtil;
/**
 * 防止sql攻击过滤器
 * @author qmhao
 * @version 1.2.3
 */
public class SqlFilter implements Filter {
	static String[] splitSql = null;
	static String errorPage = "/";
	/**
	 * 初始化
	 */
	public void init(FilterConfig arg0) throws ServletException {
		String ep = arg0.getInitParameter("errorPage");// 读配置文件
		if (ep != null) {
			errorPage = ep;
		}

		String sqlStr = arg0.getInitParameter("sqlStr");// 读配置文件
		if (sqlStr != null) {
			splitSql = sqlStr.split("\\|");
		}
	}

	public void destroy() {
	}

	/**
	 * 执行过滤
	 */
	public void doFilter(ServletRequest srequest, ServletResponse sresponse,
			FilterChain chain) throws ServletException, IOException {

		HttpServletRequest request = (HttpServletRequest) srequest;
		HttpServletResponse response = (HttpServletResponse) sresponse;
		response.setCharacterEncoding("UTF-8");

		if (splitSql != null && splitSql.length > 0) {
			Enumeration enum1 = request.getParameterNames();

			while (enum1.hasMoreElements()) {
				String param = enum1.nextElement().toString();
				String value = request.getParameter(param);
				LogUtil.info("------sqlFilter: value="+value);
				if (!isCorrectContent(value)) {
					response.setContentType("text/html;charset=UTF-8");
					response.getWriter().write("<script>alert('请求参数中含有非法字符!');</script>");
					LogUtil.error(">>>>>>>>>>>>>>sql过滤未通过!!param:"+param+"value:"+value);
					return ;
				}
			}
		}
		LogUtil.debug(">>>>>>>>>>>>>>sql过滤通过!!");
		chain.doFilter(request, response);

	}

	/**
	 * 判断是否是安全值
	 * @param paraValue
	 * @return boolean true是安全的,false为不安排的
	 */
	public static synchronized boolean isCorrectContent(String paraValue) {
		if (StrUtil.isNull(paraValue)) {
			return true;
		}
		for (int i = 0; i < splitSql.length; i++) {
			if (paraValue.toLowerCase().indexOf(splitSql[i]) != -1) {
//			if (paraValue.toLowerCase().equals(splitSql[i])) {
				return false;
			}
		}
		return true;
	}
}
 

 

web.xml配置

<!-- 安全过滤器:sql注入,敏感词 -->
	<filter>
		<filter-name>sqlFilter</filter-name>
		<filter-class>com.zbxsoft.uct.auth.SqlFilter</filter-class>		
		<init-param>
			<param-name>sqlStr</param-name>
			<param-value>grant|exec|execute|insert|drop|select|delete|update|truncate|declare</param-value>
		</init-param>
		<init-param>
			<param-name>errorPage</param-name>
			<param-value>/common/error.jsp</param-value>
		</init-param>		
	</filter>
 

 

 

分享到:
评论

相关推荐

    mybatis如何防止SQL注入

    ### MyBatis如何防止SQL注入 #### SQL注入简介与危害 SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过提交恶意的SQL代码到应用程序的输入字段中(如表单、URL等),利用这些输入来操控数据库执行非预期的...

    使用Python防止SQL注入攻击的实现示例

    ### 使用Python防止SQL注入攻击的实现示例 #### 文章背景与重要性 随着网络技术的发展,Web应用程序的安全性越来越受到人们的重视。开放式Web应用程序安全项目(OWASP)每几年都会发布一次关于Web应用程序最常见...

    Java防止SQL注入的几个途径

    Java 防止 SQL 注入的几个途径 Java 防止 SQL 注入是一个非常重要的安全问题。SQL 注入攻击是黑客最常用的攻击方式之一,它可以让攻击者访问或修改数据库中的敏感信息。因此,防止 SQL 注入是 Java 开发者必须注意...

    Python中防止sql注入的方法详解

    ### Python中防止SQL注入的方法详解 #### 前言 SQL注入是一种常见的网络安全攻击手段,攻击者通过在输入数据中嵌入恶意SQL代码,利用应用程序的漏洞执行非法操作,如篡改、删除或检索敏感数据等。对于使用Python...

    java防止SQL注入

    Java 防止 SQL 注入 Java 防止 SQL 注入是一个至关重要的安全问题,SQL 注入攻击是最常见的攻击方式之一,它不是利用操作系统或其他系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了 SQL 的...

    C# MVC 过滤器防止SQL注入

    C# MVC 过滤器防止SQL注入

    SQL注入原理以及Spring Boot如何防止SQL注入(含详细示例代码)

    防止SQL注入的方法主要包括: 1. 参数化查询:使用预编译的SQL语句(如PreparedStatement),将用户输入作为参数传递,而不是直接拼接到SQL字符串中。这样可以防止恶意代码改变SQL语句的结构。 2. 使用存储过程:...

    防止sql注入工具类l

    防止SQL注入是每个Web开发者必须关注的重要问题。在这个主题中,我们将深入探讨“防止SQL注入工具类”的相关知识点,以及如何在实际开发中有效地应用这些工具。 首先,我们需要理解SQL注入的基本原理。当应用程序...

    JS代码防止SQL注入的方法(超简单)

    本文主要介绍了如何使用JavaScript代码来防止SQL注入,这是为了保证Web应用的安全性,防止恶意用户通过输入特定的SQL语句来破坏数据库。文章从两个方面进行了说明,包括URL地址防注入和输入文本框防注入。 首先,...

    c# 全站防止sql注入

    C#全站防止SQL注入是确保应用程序安全的关键措施,下面将详细介绍如何利用Global.asax和App_code中添加类来实现这一目标。 首先,我们来理解Global.asax文件的作用。Global.asax,也被称为应用程序全局事件处理程序...

    防止sql注入解决方案

    为了防止SQL注入,开发者需要采取一系列的预防措施,确保应用程序的安全性。以下是一些核心的解决方案: 1. **预编译语句(PreparedStatement)**: 题目中提到的预编译语句是防止SQL注入的关键技术。预编译语句在...

    【ASP.NET编程知识】ASP.NET过滤类SqlFilter,防止SQL注入 .docx

    总之,虽然参数化查询是防止SQL注入的首选方法,但SqlFilter类提供了一个可行的补充方案,尤其适用于那些难以立即进行架构调整的老项目。通过在应用层面上增设此类过滤机制,可以有效地提升应用程序的安全性。当然,...

    如何防止sql注入【转载】

    SQL 注入防止方法 SQL 注入是一种常见的攻击手法,攻击者可以通过在输入数据中注入恶意的 SQL 代码,从而获取数据库的敏感信息或控制数据库。为了防止 SQL 注入,需要从多方面入手,包括使用预编译语句、正则表达式...

    Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么.详情介绍

    Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么.详情介绍Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么.详情介绍Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,...

    防止sql注入demo

    本示例"防止SQL注入demo"是针对这种威胁的一种防御措施,主要关注Java环境下的解决方案。下面我们将深入探讨SQL注入的基本原理、为何需要防止以及如何在Java中实现过滤器(Filter)来防止此类攻击。 1. SQL注入基础...

    C# 防止SQL注入式攻击

    本文将深入探讨C#防止SQL注入式攻击的相关知识点,并结合"Ex18_04防止SQL注入式攻击"这一示例进行说明。 1. **理解SQL注入攻击** SQL注入攻击通常发生在应用程序没有正确验证用户输入时,攻击者可以通过输入特定的...

    防止SQL注入式攻击

    在提供的"防止SQL注入式攻击.exe"和"SQLInner"这两个文件中,可能包含了一个示例程序或工具,用于演示如何防止SQL注入。运行或研究这些文件可以加深对防御机制的理解。不过,从安全角度出发,不应随意运行未知来源的...

    【ASP.NET编程知识】ASP.NET防止SQL注入的方法示例.docx

    ASP.NET 防止 SQL 注入攻击的方法有很多,这些方法包括参数法防注入、传统的笨一点的办法、HttpModule 实现防sql注入、SqlFilter 防止 SQL 注入、validation 防止 SQL 注入等。只有通过使用这些方法,才能有效地防止...

    asp.net和vb.net 防止sql注入源码

    详细的介绍了防止sql注入攻击,内附asp.net 源码和vb.net源码。是初学者不错的选择。希望能够帮助到你。

    参数化查询为什么能够防止SQL注入[整理].pdf

    参数化查询为什么能够防止SQL注入 参数化查询是一种防止SQL注入的有效方法,但很多人不知道为什么参数化查询能够防止SQL注入。下面,我们将一步一步的解释为什么SQL注入发生和参数化查询如何防止SQL注入。 首先,...

Global site tag (gtag.js) - Google Analytics