`
freeman983
  • 浏览: 232224 次
社区版块
存档分类
最新评论

java使用正则表达式过滤sql注入

 
阅读更多
现有项目有大量的后台查询没有使用预处理,所以前台必须使用过滤器对参数做过滤以防止sql注入。


原有方法,使用字符检索过滤:
private boolean isValid(String p) {

	p = p.toUpperCase();

	if (p.indexOf("DELETE") >= 0 || p.indexOf("ASCII") >= 0
		|| p.indexOf("UPDATE") >= 0 || p.indexOf("SELECT") >= 0
		|| p.indexOf("'") >= 0 || p.indexOf("SUBSTR(") >= 0
		|| p.indexOf("COUNT(") >= 0 || p.indexOf(" OR ") >= 0
		|| p.indexOf(" AND ") >= 0 || p.indexOf("DROP") >= 0
		|| p.indexOf("EXECUTE") >= 0 || p.indexOf("EXEC") >= 0
		|| p.indexOf("TRUNCATE") >= 0 || p.indexOf("INTO") >= 0
		|| p.indexOf("DECLARE") >= 0 || p.indexOf("MASTER") >= 0
		) {

	    logger.error("未能通过过滤器:p=" + p);

	    return false;
	}
	return true;
}



缺点,对于 UPDATEOK,BORD 这样的参数也会被过滤掉,对于/**/ 或者 /**ABC*/就很难做出判定了。


使用正则表达式过滤:

//过滤 ‘
//ORACLE 注解 --  /**/
//关键字过滤 update ,delete 

static String reg = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|"
			+ "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)";

static Pattern sqlPattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);

/***************************************************************************
 * 参数校验
 * 
 * @param str
 */
public static void isValid(String str) {

	if (sqlPattern.matcher(str).find()) {
		
		logger.error("未能通过过滤器:p=" + p);
		
		return false;
	}
	return true;
}



最后要注意的是对参数做匹配之前,先要做下decode处理:

String qurystr = req.getQueryString()==null?"": req.getQueryString();

	
if (!qurystr.equals("")) {
	    try {
		qurystr = java.net.URLDecoder.decode(qurystr);
	    } catch (Exception e1) {
		qurystr = httpReq.getRequestURI();
	    }
}


分享到:
评论
1 楼 dongbiying 2013-12-17  

相关推荐

    SQL注入过滤 (Java版)

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

    jsp+正则表达式实用总结

    5. **安全防护**:防止SQL注入和跨站脚本攻击(XSS),通过正则表达式过滤掉潜在的恶意输入。 6. **日志分析**:在处理日志文件时,正则表达式可以帮助快速定位和提取关键信息。 7. **数据提取**:从网页抓取或API...

    最全的正则表达式集合,可以满足你需要所有匹配

    5. **安全过滤**:防止SQL注入、XSS攻击等,通过正则过滤用户输入。 在文档中,你可能会看到以下内容: - 常见的正则表达式模式,如邮箱验证`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`。 - 特殊字符及其...

    Java防止SQL注入的几个途径

    Java 防止 SQL 注入的几个途径 Java 防止 SQL 注入是一个非常...防止 SQL 注入需要从多方面入手,包括杜绝 SQL 拼接、使用 PreparedStatement、过滤用户的输入等。只有通过这些措施,才能有效地防止 SQL 注入攻击。

    正则表达式精品资料

    2. 后端数据过滤:在服务器端,通过正则表达式过滤非法输入,防止SQL注入等安全问题。 3. 数据提取:从HTML、XML等文本中提取所需信息,如爬虫技术中使用正则抓取网页内容。 4. URL路由:在路由配置中,使用正则...

    ️ 讲解关于正则表达式,前端,后端等相关的知识。也记录自己的一些学习内容.zip

    这些文件可能会详细解释各种正则表达式模式的构建,前端框架如React、Vue或Angular中如何使用正则,以及后端语言如Java、Python或Node.js中的正则应用实例。通过阅读这些博客,读者可以深入理解正则表达式的原理,...

    JavaScript过滤SQL注入字符

    JavaScript过滤SQL注入字符 在Web开发中,SQL注入是一种常见的安全威胁,攻击者可以通过输入恶意的SQL代码来操控数据库。JavaScript作为客户端脚本语言,虽然主要负责与用户交互,但也可以在防止SQL注入方面发挥...

    防止xss和sql注入:JS特殊字符过滤正则

    本文将详细介绍如何通过JavaScript特殊字符过滤正则表达式来防范这两种攻击。 首先,理解XSS攻击。XSS攻击是通过在用户输入的数据中嵌入恶意脚本,当这些数据被网站处理并显示给其他用户时,恶意脚本得以执行,从而...

    JS验证URL正则表达式.txt

    ### 一、JS验证URL正则表达式 #### 1. 正则表达式的结构分析 在给定的部分内容中,定义了一个JavaScript函数`functionIsURL(str_url)`,该函数利用正则表达式来验证传入的字符串是否为一个合法的URL。 ##### 正则...

    防止sql注入解决方案

    可以配置WAF来检测和阻止SQL注入攻击,它可以根据已知的攻击模式进行过滤。 9. **定期更新与修补**: 保持数据库管理系统和应用程序框架的最新版本,及时修补已知的安全漏洞。 10. **安全编码训练**: 对开发...

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

    `cleanSQLInject`和`cleanXSS`方法通常会利用正则表达式或其他库(如OWASP Java Encoder库)来检查和转义潜在的恶意字符。例如,`cleanSQLInject`可能会替换或移除单引号、双引号等特殊字符,而`cleanXSS`则会转义...

    防止sql注入demo

    - 使用正则表达式去除或转义可能的SQL注入字符。 - 如果发现可疑输入,可以选择忽略、返回错误页面或进行其他处理。 5. 配置Filter: 在web.xml中配置`<filter>`和`<filter-mapping>`元素,指定Filter的类和需要...

    sql注入方法

    2. **使用正则表达式过滤传入的参数**:可以通过引入`java.util.regex.*`包并定义一系列正则表达式来过滤恶意输入。例如,可以定义正则表达式来检测SQL元字符、典型的SQL注入攻击模式等。 3. **字符串过滤**:除了...

    防止SQL注入的5种方法

    同时,结合正则表达式过滤、黑名单过滤以及客户端输入验证等辅助手段,可以进一步提高系统的安全性。最重要的是,开发者应该时刻关注最新的安全动态和技术进展,不断优化和完善现有的安全策略。

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

    可以使用正则表达式或者专门的库(如OWASP Java Encoder)来确保输入的安全性。 4. 处理异常:如果发现潜在的SQL注入尝试,可以记录日志,返回错误页面,或者阻止请求继续执行。 此外,除了Filter,还可以结合ORM...

    用Java Web防范SQL注入攻击.pdf

    可以使用正则表达式或内置的验证框架如Hibernate Validator进行验证。 3. **使用ORM框架**:Object-Relational Mapping(ORM)框架如Hibernate和MyBatis可以自动处理SQL注入问题,因为它们通常会进行输入验证和参数...

    Jsp防SQL注入

    可以限制输入长度、检查非法字符或使用正则表达式匹配合法格式。例如,只允许字母和数字的用户名: ```java String regex = "[a-zA-Z0-9]*"; if (!username.matches(regex)) { throw new IllegalArgumentException...

    过滤特殊字符及表情符

    - **字符串函数**:Java中的`String.replaceAll()`方法,可以结合正则表达式实现过滤。 - **自定义过滤器**:对于更复杂的需求,可以编写自定义过滤器,如提供的`TextWatcherImpl.java`和`MaxLengthInputFilter....

    JSP如何防范SQL注入攻击

    特别是在使用动态语言如Java Server Pages (JSP)时,开发者必须时刻警惕各种潜在的安全威胁,其中SQL注入是最常见的攻击方式之一。SQL注入攻击通过将恶意代码插入到SQL查询中,从而绕过应用系统的安全措施,实现非法...

    JAVA中防止SQL注入攻击类的源代码

    在本篇文章中,我们将分析一个用于JAVA中的防止SQL注入攻击的类——`StringUtils`,该类包含了用于过滤用户输入以防止SQL注入的功能,并且还提供了一些辅助方法来增强应用的安全性。 #### 二、源代码解析 ##### 1....

Global site tag (gtag.js) - Google Analytics