`
zyazyz008
  • 浏览: 4039 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

java filter防止sql注入攻击

阅读更多
    java filter防止sql注入攻击

    原理,过滤所有请求中含有非法的字符,例如:, & <  select delete 等关键字,黑客可以利用这些字符进行注入攻击,原理是后台实现使用拼接字符串,案例:


    某个网站的登入验证的SQL查询代码为

          strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"

    恶意填入

          userName = "' OR '1'='1";与passWord = "' OR '1'='1";时,将导致原本的SQL字符串被填为
          

          strSQL = "SELECT * FROM users WHERE (name = '' OR '1'='1') and (pw = '' OR '1'='1');"

    也就是实际上运行的SQL命令会变成下面这样的

            strSQL = "SELECT * FROM users;"

    因此达到无帐号密码,亦可登入网站。所以SQL注入攻击被俗称为黑客的填空游戏。

    实现三个步骤:

    1,编写filter

    2,配置xml

    3,配置error.jsp

    filter代码;


    package cn.kepu.filter;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    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 javax.servlet.http.HttpServletResponse;
    /**
     * 防止sql注入,自定义filter www.2cto.com
     * cn.kepu.filter.SqlInjectFilter.java
     * @author ffr
     * created at 2012-7-12
     */
    public class SqlInjectFilter implements Filter {
        
        private static List<String> invalidsql = new ArrayList<String>();
        private static String error = "/error.jsp";
        private static boolean debug = false;
        
        public void destroy() {
            
        }
        public void doFilter(ServletRequest req, ServletResponse res,
                FilterChain fc) throws IOException, ServletException {
            if(debug){
                System.out.println("prevent sql inject filter works");
            }
            HttpServletRequest request = (HttpServletRequest)req;
            HttpServletResponse response = (HttpServletResponse)res;
            Map<String, String> params = request.getParameterMap();
            Set<String> keys = params.keySet();
            for(String key : keys){
                String value = request.getParameter(key);
                if(debug){
                    System.out.println("process params <key, value>: <"+key+", "+value+">");
                }
                for(String word : invalidsql){
                    if(word.equalsIgnoreCase(value) || value.contains(word)){
                        if(value.contains("<")){
                            value = value.replace("<", "<");
                        }
                        if(value.contains(">")){
                            value = value.replace(">", ">");
                        }
                        request.getSession().setAttribute("sqlInjectError", "the request parameter \""+value+"\" contains keyword: \""+word+"\"");
                        response.sendRedirect(request.getContextPath()+error);
                        return;
                    }
                }
            }
            fc.doFilter(req, res);
        }
        public void init(FilterConfig conf) throws ServletException {
            String sql = conf.getInitParameter("invalidsql");
            String errorpage = conf.getInitParameter("error");
            String de = conf.getInitParameter("debug");
            if(errorpage != null){
                error = errorpage;
            }
            if(sql != null){
                invalidsql = Arrays.asList(sql.split(" "));
            }
            if(de != null && Boolean.parseBoolean(de)){
                debug = true;
                System.out.println("PreventSQLInject Filter staring...");
                System.out.println("print filter details");
                System.out.println("invalid words as fllows (split with blank):");
                for(String s : invalidsql){
                    System.out.print(s+" ");
                }
                System.out.println();
                System.out.println("error page as fllows");
                System.out.println(error);
                System.out.println();
            }
        }
    }
    2.web.xml中添加如下配置:

    [html]
    <filter>
        <filter-name>PreventSqlInject</filter-name>
        <filter-class>cn.kepu.filter.SqlInjectFilter</filter-class>
        <!-- filter word, split with blank -->
        <init-param>
            <param-name>invalidsql</param-name>
            <param-value>select insert delete from update create destory drop alter and or like exec count chr mid master truncate char declare ; - ' % < ></param-value>
        </init-param>
        <!-- error page -->
        <init-param>
            <param-name>error</param-name>
            <param-value>/error.jsp</param-value>
        </init-param>
        <!-- debug -->    
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>PreventSqlInject</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>

    3,在根目录下添加error.jsp
    [plain]
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>防sql注入系统</title>
      </head>
      
      <body>
        这个是防sql注入系统,自动过滤您的请求,请更换请求字符串。
        <%=session.getAttribute("sqlInjectError")%>
        <p><a href="<%=path%>">点此返回</a></p>
      </body>
    </html>
分享到:
评论

相关推荐

    Java防止SQL注入的几个途径

    使用 PreparedStatement 可以防止 SQL 注入攻击,因为攻击者不能 inject 恶意的 SQL 语句。 3.过滤用户的输入 在 WEB 层我们可以过滤用户的输入来防止 SQL 注入。例如,可以使用 Filter 来过滤全局的表单参数。...

    java防sql注入攻击过滤器

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

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

    ### JAVA中防止SQL注入攻击类的源代码解析 #### 一、概述 SQL注入是一种常见的安全漏洞,通过这种攻击方式,攻击者可以在应用程序发送到数据库的SQL语句中插入恶意代码,进而执行非授权操作,如修改数据或窃取敏感...

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

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

    防止sql注入demo

    在IT行业中,SQL注入是一...通过理解其原理、应用预编译语句、使用Filter以及结合其他安全措施,可以显著降低SQL注入攻击的风险。这个"防止SQL注入demo"提供了一个实践案例,帮助开发者更好地理解和实施这些防护策略。

    SQL注入过滤 (Java版)

    总之,Java中的SQL注入过滤器是保护应用程序免受SQL注入攻击的重要手段之一。通过在请求处理前对参数进行检查和清理,可以有效地降低被注入的风险。同时,结合其他安全措施,如使用预编译的SQL语句,可以进一步增强...

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

    本项目"java web Xss及sql注入过滤器.zip"就是针对这两种威胁提供的一种解决方案,基于流行的Spring Boot 2.0框架进行开发。 XSS 攻击是通过在网页中插入恶意脚本,当其他用户访问该页面时,这些脚本会被执行,从而...

    防止SQL注入和XSS攻击Filter

    ### 防止SQL注入和XSS攻击Filter详解 #### 一、背景介绍 在现代Web应用开发过程中,确保应用程序安全至关重要。其中两大常见的安全威胁是SQL注入与跨站脚本(Cross Site Scripting,简称XSS)攻击。这两种攻击方式...

    预防XSS攻击和SQL注入XssFilter

    一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如...

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

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

    防止sql注入的java代码

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

    防止sql注入过滤器配置

    通过上述分析可以看出,`SqlFilter`类提供了一种简单而有效的方式来防止SQL注入攻击。通过在请求进入应用程序之前对其进行过滤,可以在很大程度上减少因SQL注入而带来的风险。当然,除了使用过滤器之外,还应该结合...

    关于JSP防范SQL注入攻击

    其中,SQL注入攻击是威胁Web应用安全的主要漏洞之一,尤其对于采用JSP(Java Server Pages)技术构建的应用来说更为显著。本文将详细介绍如何在JSP开发过程中防范SQL注入攻击,包括SQL注入的基本原理、常见的防范...

    sql注入与防止

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

    主要使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验

    主要使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验 1,主要实现的是三大块功能:Xss攻击,sql注入,服务器白名单,以及csrf 2,此Filter为真实项目部署,在XssHttpServletRequestWrapper...

    使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验

    主要使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验 1,主要实现的是三大块功能:Xss攻击,sql注入,服务器白名单,以及csrf 2,此Filter为真实项目部署,在XssHttpServletRequestWrapper...

    filter过滤器防止恶意注入

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

    防xss攻击和sql注入

    总之,XSS攻击和SQL注入都是Web应用程序常见的安全问题,开发者应采取多种策略来防止这些攻击,包括但不限于输入验证、转义、使用安全API以及设置合理的安全策略。通过持续学习和实践,我们可以构建更安全、更可靠的...

    java过滤器,防止XSS、SQL

    java过滤器,XSS : 跨站脚本攻击(Cross Site Scripting),SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

Global site tag (gtag.js) - Google Analytics