java类过滤器,防止页面SQL注入

package com.tarena.dingdang.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;  
  
public class AntiSqlInjectionfilter implements Filter {  
  
    public void destroy() {  
        // TODO Auto-generated method stub  
    }  
      
    public void init(FilterConfig arg0) throws ServletException {  
        // TODO Auto-generated method stub  
    }  
      
    public void doFilter(ServletRequest args0, ServletResponse args1,  
            FilterChain chain) throws IOException, ServletException {  
        HttpServletRequest req=(HttpServletRequest)args0;  
        HttpServletRequest res=(HttpServletRequest)args1;  
         //获得所有请求参数名  
        Enumeration params = req.getParameterNames();  
        String sql = "";  
        while (params.hasMoreElements()) {  
            //得到参数名  
            String name = params.nextElement().toString();  
            //System.out.println("name===========================" + name + "--");  
            //得到参数对应值  
            String[] value = req.getParameterValues(name);  
            for (int i = 0; i < value.length; i++) {  
                sql = sql + value[i];  
            }  
        }  
        //System.out.println("============================SQL"+sql);  
        //有sql关键字,跳转到error.html  
        if (sqlValidate(sql)) {  
            throw new IOException("您发送请求中的参数中含有非法字符");  
            //String ip = req.getRemoteAddr();  
        } else {  
            chain.doFilter(args0,args1);  
        }  
    }  
      
    //效验  
    protected static boolean sqlValidate(String str) {  
        str = str.toLowerCase();//统一转为小写  
        String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" +  
                "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" +  
                "table|from|grant|use|group_concat|column_name|" +  
                "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" +  
                "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#";//过滤掉的sql关键字,可以手动添加  
        String[] badStrs = badStr.split("\\|");  
        for (int i = 0; i < badStrs.length; i++) {  
            if (str.indexOf(badStrs[i]) >= 0) {  
                return true;  
            }  
        }  
        return false;  
    }  
}  
  
  
<!--在web.xml文件中的配置-->  
<!-- 防止SQL注入的过滤器 -->  
    <filter>  
        <filter-name>antiSqlInjection</filter-name>  
        <filter-class>com.tarena.dingdang.filter.AntiSqlInjectionfilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>antiSqlInjection</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jed的技术阶梯

图解 Java 位运算

需要说明的是,在计算机中,数字是以补码的形式存在的,计算也是用补码来进行计算,计算后的结果也是补码

75420
来自专栏鸿的学习笔记

写给开发者的机器学习指南(十二)

此代码加载DJI数据,并将其添加到已经包含我们自己的股票市场指数的图形上。但是,当我们执行这段代码时,结果如下。

11520
来自专栏偏前端工程师的驿站

基础野:细说原码、反码和补码

Brief                                说来惭愧虽然刚接触计算机时已经学过原码、反码和补码的内容,但最近重温时却发现“这是什么...

45890
来自专栏拂晓风起

actionscript DES 加密 解密 (AES,其他加密)

13130
来自专栏Hongten

Java Web 网络留言板6 MVC模式

request.setAttribute("message", message);   request.getRequestDispatcher("/addR...

32110
来自专栏行者常至

java 获取 post参数

10930
来自专栏土豆专栏

JavaWeb入门之Servlet小练习

在web.xml文件中设置两个WEB应用的初始化参数,username,password,创建一个html页面,定义两个请求字段并发送到一个Servlet中,对...

432120
来自专栏软件开发 -- 分享 互助 成长

原码 反码 补码 移码

1、正数的原码、补码、反码均为其本身; 2、负数(二进制)的原码、补码、反码公式: 反码 = 原码(除符号位外)每位取反 补码 = 反码 + 1 反码 =...

23760
来自专栏GIS讲堂

大量POI点展示的一种解决方案——续

在上文“ 大量POI点展示的一种解决方案”中,介绍了在在后台将POI生成图片在前台展示,文章中没有涉及到点的抽稀问题,也就是当点的数据量非常大的时候,这种展示方...

18730
来自专栏Danny的专栏

【软考路上】——原码、反码、补码、移码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

90420

扫码关注云+社区

领取腾讯云代金券