现有项目有大量的后台查询没有使用预处理,所以前台必须使用过滤器对参数做过滤以防止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();
}
}
分享到:
相关推荐
为了防止这种情况发生,开发者需要在应用程序中实施有效的防御策略,其中一种方法就是使用过滤器(Filter)进行SQL注入的过滤。本篇将详细探讨Java环境下如何实现一个SQL注入过滤器,并结合`web.xml`配置文件来部署...
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 注入是一个非常...防止 SQL 注入需要从多方面入手,包括杜绝 SQL 拼接、使用 PreparedStatement、过滤用户的输入等。只有通过这些措施,才能有效地防止 SQL 注入攻击。
2. 后端数据过滤:在服务器端,通过正则表达式过滤非法输入,防止SQL注入等安全问题。 3. 数据提取:从HTML、XML等文本中提取所需信息,如爬虫技术中使用正则抓取网页内容。 4. URL路由:在路由配置中,使用正则...
这些文件可能会详细解释各种正则表达式模式的构建,前端框架如React、Vue或Angular中如何使用正则,以及后端语言如Java、Python或Node.js中的正则应用实例。通过阅读这些博客,读者可以深入理解正则表达式的原理,...
JavaScript过滤SQL注入字符 在Web开发中,SQL注入是一种常见的安全威胁,攻击者可以通过输入恶意的SQL代码来操控数据库。JavaScript作为客户端脚本语言,虽然主要负责与用户交互,但也可以在防止SQL注入方面发挥...
本文将详细介绍如何通过JavaScript特殊字符过滤正则表达式来防范这两种攻击。 首先,理解XSS攻击。XSS攻击是通过在用户输入的数据中嵌入恶意脚本,当这些数据被网站处理并显示给其他用户时,恶意脚本得以执行,从而...
### 一、JS验证URL正则表达式 #### 1. 正则表达式的结构分析 在给定的部分内容中,定义了一个JavaScript函数`functionIsURL(str_url)`,该函数利用正则表达式来验证传入的字符串是否为一个合法的URL。 ##### 正则...
可以配置WAF来检测和阻止SQL注入攻击,它可以根据已知的攻击模式进行过滤。 9. **定期更新与修补**: 保持数据库管理系统和应用程序框架的最新版本,及时修补已知的安全漏洞。 10. **安全编码训练**: 对开发...
`cleanSQLInject`和`cleanXSS`方法通常会利用正则表达式或其他库(如OWASP Java Encoder库)来检查和转义潜在的恶意字符。例如,`cleanSQLInject`可能会替换或移除单引号、双引号等特殊字符,而`cleanXSS`则会转义...
- 使用正则表达式去除或转义可能的SQL注入字符。 - 如果发现可疑输入,可以选择忽略、返回错误页面或进行其他处理。 5. 配置Filter: 在web.xml中配置`<filter>`和`<filter-mapping>`元素,指定Filter的类和需要...
2. **使用正则表达式过滤传入的参数**:可以通过引入`java.util.regex.*`包并定义一系列正则表达式来过滤恶意输入。例如,可以定义正则表达式来检测SQL元字符、典型的SQL注入攻击模式等。 3. **字符串过滤**:除了...
同时,结合正则表达式过滤、黑名单过滤以及客户端输入验证等辅助手段,可以进一步提高系统的安全性。最重要的是,开发者应该时刻关注最新的安全动态和技术进展,不断优化和完善现有的安全策略。
可以使用正则表达式或者专门的库(如OWASP Java Encoder)来确保输入的安全性。 4. 处理异常:如果发现潜在的SQL注入尝试,可以记录日志,返回错误页面,或者阻止请求继续执行。 此外,除了Filter,还可以结合ORM...
可以使用正则表达式或内置的验证框架如Hibernate Validator进行验证。 3. **使用ORM框架**:Object-Relational Mapping(ORM)框架如Hibernate和MyBatis可以自动处理SQL注入问题,因为它们通常会进行输入验证和参数...
可以限制输入长度、检查非法字符或使用正则表达式匹配合法格式。例如,只允许字母和数字的用户名: ```java String regex = "[a-zA-Z0-9]*"; if (!username.matches(regex)) { throw new IllegalArgumentException...
- **字符串函数**:Java中的`String.replaceAll()`方法,可以结合正则表达式实现过滤。 - **自定义过滤器**:对于更复杂的需求,可以编写自定义过滤器,如提供的`TextWatcherImpl.java`和`MaxLengthInputFilter....
特别是在使用动态语言如Java Server Pages (JSP)时,开发者必须时刻警惕各种潜在的安全威胁,其中SQL注入是最常见的攻击方式之一。SQL注入攻击通过将恶意代码插入到SQL查询中,从而绕过应用系统的安全措施,实现非法...
在本篇文章中,我们将分析一个用于JAVA中的防止SQL注入攻击的类——`StringUtils`,该类包含了用于过滤用户输入以防止SQL注入的功能,并且还提供了一些辅助方法来增强应用的安全性。 #### 二、源代码解析 ##### 1....