`

过滤器 去除sql注入语句

阅读更多

 

package com.spider.reader.common.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;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.spider.reader.common.util.StringUtils;

public class CharsetFilter implements Filter {
	
	protected final static Log log = LogFactory.getLog(CharsetFilter.class);

	private String encoding = null;
	
	private String errorforward = null;
	
	private static String postsql = null;
	
	private static String getsql = null;
	
	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		if (StringUtils.isEmpty(request.getCharacterEncoding())) {
			request.setCharacterEncoding(encoding);
			response.setCharacterEncoding(encoding);
			response.setContentType("text/html;charset=UTF-8");
			chain.doFilter(request, response);
		}
		boolean bool = UrlFilter((HttpServletRequest) request);
		if (bool == false) {
			request.getRequestDispatcher(errorforward).forward(request, response);
		}	
	}

	public void init(FilterConfig filterconfig) throws ServletException {
		encoding = filterconfig.getInitParameter("encoding");
		errorforward = filterconfig.getInitParameter("errorforward");
		postsql = filterconfig.getInitParameter("postsql");
		getsql = filterconfig.getInitParameter("getsql");
	}

	/**
	 * URL过滤
	 * 
	 * @author songnan
	 * @param request
	 * @return true为合法 false为非法
	 */
	public static boolean UrlFilter(HttpServletRequest request) {
		String method = request.getMethod().toString().toLowerCase();
		StringBuffer sbUrl = request.getRequestURL();
		String[] filterurl = postsql.split("\\|");
		if("post".equalsIgnoreCase(StringUtils.nvl(method))){
			filterurl = getsql.split("\\|");
		}
		Enumeration emParams = request.getParameterNames();
		StringBuffer sb = new StringBuffer("");
		boolean bool = true;
		while(emParams.hasMoreElements()){
			String sParam = (String) emParams.nextElement();
			String[] sValues = request.getParameterValues(sParam);
			sParam = sParam.replaceAll(" ", "");
			String sValue = "";
			if(!sParam.startsWith("paragraph")){
				for (int i = 0; i < sValues.length; i++) {
					sValue = sValues[i];
					sValue = sValue.replaceAll(" ", "");
					if (sValue != null && sValue.trim().length() != 0 && bool == true) {
						bool = false;
						sb.append(sParam).append("=").append(sValue);
					} else if (sValue != null && sValue.trim().length() != 0 && bool == false) {
						sb.append("&").append(sParam).append("=").append(sValue);
					}
				}
			}
		}
		if (sb.toString() != null) {
			String loqueryStr = sb.toString().toLowerCase();
			for (int i = 0; i < filterurl.length; i++) {
				if (loqueryStr.contains(filterurl[i])) {
					log.error("错误链接地址:" + sbUrl.toString());
					log.error(loqueryStr + " = " + filterurl[i]);
					return false;
				}
			}
		}
		return true;
	}
}
 

 

 

web.xml

 

<filter>
	<filter-name>encoding</filter-name>
	<filter-class>
		com.spider.reader.common.filter.CharsetFilter
	</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>errorforward</param-name>
		<param-value>/index.jsp</param-value>
	</init-param>
	<init-param>
		<param-name>getsql</param-name>
		<param-value>
			exec|execute|insert|delete|update|master|truncate|char|declare|like|drop|database
		</param-value>
	</init-param>
	<init-param>
		<param-name>postsql</param-name>
		<param-value>
			exec|execute|delete|update|truncate|drop
		</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>encoding</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
 

 

分享到:
评论

相关推荐

    防止sql注入demo

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

    sql.rar_SQL防注入_asp 防注入_sql注入_防破

    此外,还可以使用白名单或黑名单过滤器来去除或转换可能的危险字符。 对于登录和其他关键操作,使用HTTPS协议进行加密通信,可以保护数据在传输过程中不被窃取。同时,定期更新和打补丁,保持服务器软件和数据库...

    SQL语句-常用的sql语句生成器.zip

    - **SQL注入**:一种常见的网络安全攻击方式,用户应避免在动态SQL中直接拼接用户输入,而应使用参数化查询。 - **索引优化**:合理创建和使用索引可以显著提升查询速度,但过多的索引会影响写操作性能。 - **...

    asp.net语句过滤

    4. **Response.Filter**:可以自定义输出过滤器,检查并处理响应内容,去除或编码可能的恶意脚本。 **ASP.NET的替换和过滤** 在ASP.NET中,字符串替换和过滤是常见的操作,可以使用String类的方法如Replace(),...

    最详细的SQL注入相关的命令整理(2)

    SQL注入是一种常见的网络安全攻击方式,通过在设计不佳的Web应用程序中输入恶意SQL语句,攻击者可以操纵数据库执行非授权操作,如读取、修改或删除数据。 ### SQL注入命令详解 #### 1. 创建临时表存储目录信息 ``...

    pl/sql命令技巧

    - `EDIT`:启动默认编辑器编辑SQL脚本。 - `EDIT filename`:编辑指定文件。 - **屏幕输出控制**: - `SPOOL filename`:将输出重定向到文件。 - `SPOOL OFF`:关闭重定向。 - **退出SQL*Plus**:`EXIT` #### ...

    sql by pass ian

    在网络安全领域中,SQL注入是一种常见的攻击方式,通过将恶意SQL代码插入到应用程序的数据输入字段中,攻击者可以获取敏感数据、篡改数据库或控制整个后端服务器。安全狗(SafeDog)是一款常用的安全防护软件,用于...

    程序员的SQL金典.rar

     10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  10.2.4 优化手法  10.3 事务  10.3.1 事务...

    养成良好的sql习惯

    8. **使用参数化查询:** 参数化查询不仅可以提高安全性,防止SQL注入攻击,还可以提高执行计划的复用率,从而提高查询性能。 9. **定期分析和优化查询计划:** 使用数据库的查询分析工具,如SQL Server的查询计划...

    java开发常见漏洞及处理说明.pdf

    SQL注入是一种常见的安全漏洞,攻击者通过在输入字段中插入恶意SQL语句,欺骗服务器执行非预期的操作。例如,攻击者可能试图获取数据库中的敏感信息或修改数据库内容。为了防御SQL注入,开发人员应确保对用户输入...

    SpringBoot整合XSS.zip

    SpringBoot默认使用PreparedStatement来防止SQL注入,但开发者仍需保持警惕,避免直接拼接SQL语句。此外,可以考虑使用ORM框架如MyBatis或JPA,它们提供了更高级别的SQL安全防护。 总结,通过SpringBoot整合Xss...

    php过滤请求中数据方法

    综上所述,PHP提供了丰富的内置工具来过滤和验证请求数据,但开发人员应始终牢记,仅仅依赖这些工具还不够,还需要结合良好的编码习惯和全面的安全策略,例如使用预处理语句防止SQL注入,使用htmlspecialchars防止...

    使用filter对字符进行过滤

    然后,我们可以对这些参数的值进行过滤,例如去除非法字符、禁止输入SQL注入语句等。 3. **HttpServletRequest中的字符过滤**: - 使用`getParameter()`或`getParameterValues()`获取参数后,可以对每个参数值执行...

    SQL 学习课件

    - **参数化查询**:避免SQL注入风险。 #### 七、模块3:分组与汇总数据 - **TOP n值**:列出前n个值。 - 示例:SELECT TOP 10 * FROM table_name ORDER BY column_name DESC; - **聚合函数**:用于计算一组值的...

    java软件工程师面试基本题.docx

    它是一个基于Servlet过滤器的框架,通过DispatcherServlet作为前端控制器来接收和处理HTTP请求。配置通常在`web.xml`中完成,DispatcherServlet负责分发请求给相应的处理器。 2. **Spring框架的注解**:Spring框架...

Global site tag (gtag.js) - Google Analytics