`
yanyanquan
  • 浏览: 448336 次
  • 性别: Icon_minigender_1
  • 来自: 江门
社区版块
存档分类
最新评论

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

阅读更多
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

filter功能.它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够

在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet

chaining”(servlet 链). 所以用户发出的任何request都必然经过filter处理,我们就在filter处理用户request包含的敏感关

键字,然后replace掉或是让页面转到错误页来提示用户,这样就可以很好的防sql注入了。


java代码:ReqFilter.java

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() {
}
}




java代码:ReqHttpServletRequestWrapper.java


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;
}


@Override
public String getParameter(String name) {
  String value = super.getParameter(name);
  if (value != null) {
   value = reqEncode(value);
  }
  return value;
}





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;

   case '>':
    sb.append('>');
    break;
   case '<':
    sb.append('<');
    break;
   default:
    sb.append(c);
    break;
   }
  }
  return sb.toString();
}


public HttpServletRequest getOrgRequest() {
  return orgRequest;
}


public static HttpServletRequest getOrgRequest(HttpServletRequest req) {
  if (req instanceof ReqHttpServletRequestWrapper) {
   return ((ReqHttpServletRequestWrapper) req).getOrgRequest();
  }

  return req;
}
}

分享到:
评论

相关推荐

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

    基于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