`
toyota2006
  • 浏览: 551402 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

使用Servlet Filter来防止SQL注入的方法

阅读更多
使用Servlet Filter来防止SQL注入的方法
参考:http://618119.com/archives/2010/02/23/156.html

import java.io.IOException;

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;

public class ReqFilter implements Filter {


public void init(FilterConfig config) throws ServletException {
}


public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
ReqHttpServletRequestWrapper reqRequest = new ReqHttpServletRequestWrapper(
(HttpServletRequest) request);
chain.doFilter(reqRequest, response);
}


public void destroy() {
}
}



import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;


public class ReqHttpServletRequestWrapper extends HttpServletRequestWrapper {
	HttpServletRequest orgRequest = null;

	public ReqHttpServletRequestWrapper(HttpServletRequest request) {
		super(request);
		orgRequest = request;
	}

	/**
	 * 覆盖getParameter方法,将参数名和参数值都做req过滤。<br/>
	 * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/>
	 * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
	 */
	@Override
	public String getParameter(String name) {
		String value = super.getParameter(name);
		if (value != null) {
			value = reqEncode(value);
		}
		return value;
	}

	/**
	 * 覆盖getHeader方法,将参数名和参数值都做req过滤。<br/>
	 * 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/> getHeaderNames 也可能需要覆盖
	 */
/*	@Override
	public String getHeader(String name) {
		String value = super.getHeader(reqEncode(name));
		if (value != null) {
			value = reqEncode(value);
		}
		return value;
	}*/

	/**
	 * 将容易引起req漏洞的半角字符直接替换成全角字符
	 * 
	 * @param s
	 * @return
	 */
	private static String reqEncode(String s) {
		if (s == null || "".equals(s)) {
			return s;
		}
		StringBuilder sb = new StringBuilder(s.length() + 16);
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			switch (c) {
			case '\'':
				sb.append("&prime;");// &acute;");
				break;
			case '′':
				sb.append("&prime;");// &acute;");
				break;
			case '\"':
				sb.append("&quot;");
				break;
			case '"':
				sb.append("&quot;");
				break;
			case '&':
				sb.append("&");
				break;
			case '#':
				sb.append("#");
				break;
			case '\\':
				sb.append('¥');
				break;

			default:
				sb.append(c);
				break;
			}
		}
		return sb.toString();
	}

	/**
	 * 获取最原始的request
	 * 
	 * @return
	 */
	public HttpServletRequest getOrgRequest() {
		return orgRequest;
	}

	/**
	 * 获取最原始的request的静态方法
	 * 
	 * @return
	 */
	public static HttpServletRequest getOrgRequest(HttpServletRequest req) {
		if (req instanceof ReqHttpServletRequestWrapper) {
			return ((ReqHttpServletRequestWrapper) req).getOrgRequest();
		}

		return req;
	}
}



 <filter>
  <display-name>reqFilter</display-name>
  <filter-name>reqFilter</filter-name>
  <filter-class>jp.co.bsnw.servlet.ReqFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>reqFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
分享到:
评论

相关推荐

    Java防止SQL注入的几个途径

    在 WEB 层我们可以过滤用户的输入来防止 SQL 注入。例如,可以使用 Filter 来过滤全局的表单参数。下面是一个简单的示例代码: ```java import java.io.IOException; import java.util.Iterator; import javax....

    防止sql注入demo

    下面我们将深入探讨SQL注入的基本原理、为何需要防止以及如何在Java中实现过滤器(Filter)来防止此类攻击。 1. SQL注入基础: SQL注入是由于应用程序未能正确验证和清理用户输入的数据导致的。当用户提交的输入被...

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

    为了解决这一问题,我们可以利用Java的Filter机制来创建一个防止SQL注入的URL过滤器。下面将详细介绍这个过滤器的工作原理、配置方法以及如何有效地防止SQL注入。 首先,我们需要理解SQL注入的基本概念。SQL注入是...

    java防sql注入攻击过滤器

    5. **使用预编译的SQL语句(PreparedStatement)**:除了过滤器之外,还应该使用PreparedStatement来执行SQL查询,因为它们可以自动防止基本的SQL注入攻击。预编译的语句会将参数与SQL语句分开处理,从而消除大部分...

    防止sql注入过滤器配置

    为了保护系统免受此类攻击,开发者通常会采用各种方法来增强应用程序的安全性,其中一种有效的方式就是使用过滤器(Filter)来预防SQL注入。 #### 二、SQL注入基础 SQL注入是一种常见的安全漏洞,攻击者通过向输入...

    防止SQL注入和XSS攻击Filter

    通过使用自定义的Filter来防止SQL注入和XSS攻击是一种常见且有效的安全措施。本文介绍了如何实现一个简单的XssFilter,并详细解释了其工作原理。在实际项目中,开发者还可以根据具体的业务需求进一步完善过滤逻辑,...

    SQL注入过滤 (Java版)

    为了防止这种情况发生,开发者需要在应用程序中实施有效的防御策略,其中一种方法就是使用过滤器(Filter)进行SQL注入的过滤。本篇将详细探讨Java环境下如何实现一个SQL注入过滤器,并结合`web.xml`配置文件来部署...

    sql注入与防止

    下面是一个简单的Java Filter示例,展示了如何通过过滤器来防止SQL注入攻击: ```java public class SQLFilter implements Filter { private String inj_str = "'|and|exec|insert|select|delete|update|count|*|%...

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

    2. **SQL注入防护**:项目可能使用了Spring Data JPA、JdbcTemplate或MyBatis等持久层技术,这些库提供了防止SQL注入的功能。例如,通过使用参数化的`query()`或`update()`方法,可以确保即使输入含有恶意SQL片段,...

    防止sql注入的java代码

    `Checksql`类实现了`javax.servlet.Filter`接口,主要负责对HTTP请求中的参数进行检查,以确保其不包含可能导致SQL注入攻击的字符或字符串。具体来说,该类的主要功能包括: - **初始化**:加载预定义的SQL注入...

    SpringBoot整合XssFilter,Jsoup等实现请求参数的过滤,处理Xss攻击及sql注入.zip

    原理过程 Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Springboot中没有web.xml,那Springboot中,不用管Filter是如何交给Ser...SpringBoot整合XssFilter,...

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

    本文将详细介绍如何使用Java Filter实现防止SQL注入的功能。 首先,我们需要创建一个实现了`javax.servlet.Filter`接口的类,例如名为`XSSFilter`。这个类将负责拦截请求并处理可能存在的SQL注入风险。下面是一个...

    filter过滤器防止恶意注入

    在Java Web开发中,`Filter`过滤器是一个关键的安全组件,用于拦截...总的来说,`URLfilter`展示了如何使用Java过滤器来防止SQL注入攻击的一个基本思路,但在实际应用中,需要结合更全面的安全策略来提高系统的安全性。

    servlet_filter.rar_Servlet filter_重写filter

    Servlet Filter是Java Servlet ...通过重写Filter,我们可以定制化处理流程,有效地解决乱码问题,以及增强应用的安全性,防止诸如SQL注入和XSS等常见攻击。理解并熟练运用Filter,对于提升Java Web开发技能至关重要。

    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 ...

    springmvc4配置防止XSS攻击的方法

    这一过滤器通常会实现javax.servlet.Filter接口,并在doFilter()方法中进行过滤逻辑的实现。过滤器会获取到原始的HttpServletRequest对象,然后用XssHttpServletRequestWrapper进行包装,以确保请求数据被正确过滤。...

    基于jdbc+servlet+filter的网上投票系统.zip

    开发者可能使用PreparedStatement对象来防止SQL注入攻击,并通过ResultSet处理查询结果。事务管理也是JDBC的重要部分,确保数据操作的原子性、一致性、隔离性和持久性。 【Servlet】Servlet是Java Servlet API提供...

    java中servlet文字过滤器

    3. **安全过滤**:过滤敏感字符,防止SQL注入、跨站脚本攻击等。 4. **性能优化**:例如,开启GZIP压缩,减少网络传输的数据量。 5. **权限控制**:检查用户权限,决定是否允许访问特定资源。 ### 5. 扩展性与灵活...

    Servlet编写登录

    实现登录功能时,应考虑安全性问题,如使用HTTPS协议加密传输数据,防止SQL注入,使用盐值哈希存储密码,以及限制非法登录尝试次数等。 7. **最佳实践** - 使用MVC模式(Model-View-Controller)分离业务逻辑、...

Global site tag (gtag.js) - Google Analytics