博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防SQL注入过滤器的实现
阅读量:6266 次
发布时间:2019-06-22

本文共 4275 字,大约阅读时间需要 14 分钟。

hot3.png

1- 配置web.xml,增加过滤器配置

  
     
PreventSqlInject
     
SqlInjectFilter
     
     
         
sensitive-words
         
select insert delete from update create destory drop alter and or like exec count chr mid master truncate char declare ; ' % < >
     
     
     
         
encrypting-parameter-names
         
username password
     
    
     
        
error-page
         
/sqlInjectError.jsp
     
     
         
         
debug
         
false
     
   
   
     
PreventSqlInject
     
/*
   

2- 实现过滤器 SqlInjectFilter

import java.io.IOException;import java.text.MessageFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.List;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;import org.apache.commons.codec.binary.Base64;public class SqlInjectFilter implements Filter {	// SQL 注入敏感词列表	private static List
 sensWords = new ArrayList
(); // Base64 加密参数key列表 private static List
 encrParams=new ArrayList
(); // 错误页面 private static String error = "/sqlInjectError.jsp"; // 调试开关 private static boolean debug = false; @Override public void destroy() { } @Override 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; request.setCharacterEncoding("UTF-8"); Set
 keys = request.getParameterMap().keySet(); for (String key : keys) { String value = request.getParameter(key); if(encrParams.contains(key)){ value=new String(Base64.decodeBase64(value.getBytes())); } if (debug) { System.out.println(MessageFormat.format("{0}={1}", key,value)); } for (String word : sensWords) { if( value.toUpperCase().contains(word.toUpperCase()) ){ request.getSession().setAttribute( "sqlInjectError", "the request parameter \"" + value + "\" contains keyword: \"" + word + "\""); response.sendRedirect(request.getContextPath() + error); return; } } } fc.doFilter(req, res); } @Override public void init(FilterConfig conf) throws ServletException { String sSensiWord = conf.getInitParameter("sensitive-words"); String sEncryParam = conf.getInitParameter("encrypting-parameter-names"); String errorPage = conf.getInitParameter("error-page"); String de = conf.getInitParameter("debug"); if (errorPage != null) { error = errorPage; } if(sSensiWord!=null){ sensWords=Arrays.asList(sSensiWord.split(" ")); } if(sEncryParam!=null){ encrParams=Arrays.asList(sEncryParam.split(" ")); } if (de != null && Boolean.parseBoolean(de)) { debug = true; System.out.println("PreventSQLInject Filter staring..."); System.out.println("print filter details"); System.out.println("sensitive words as fllows (split with blank):"); for (String s : sensWords) { System.out.print(s + " "); } System.out.println(); System.out.println("encrypting parameter key as fllows (split with blank):"); for (String s : encrParams) { System.out.print(s + " "); } System.out.println(); System.out.println("error page as fllows"); System.out.println(error); System.out.println(); } }}

3-新增 errorPage 页面  sqlInjectError.jsp

<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8" %> <% String path = request.getContextPath(); %>          防sql注入系统           
         
这个是防sql注入系统,自动过滤您的请求,请更换请求字符串。     <%=session.getAttribute("sqlInjectError")%>  
     

转载于:https://my.oschina.net/freegarden/blog/646387

你可能感兴趣的文章
SDUT 3503 有两个正整数,求N!的K进制的位数
查看>>
【.Net】C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径...
查看>>
Redis常用命令速查 <第二篇>
查看>>
CSS规范
查看>>
使用FastDateFormat来代替JDK自带的DateFormat
查看>>
Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
查看>>
Android源代码解析之(三)--&gt;异步任务AsyncTask
查看>>
(zhuan) 自然语言处理中的Attention Model:是什么及为什么
查看>>
C#中使用RabbitMQ收发队列消息
查看>>
Hadoop1.2.1 全然分布式集群搭建实操笔记
查看>>
第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
查看>>
MVC总结--MVC简单介绍以及和WebForm差别
查看>>
tiny4412 裸机程序 五、控制icache【转】
查看>>
VB.NET多线程入门
查看>>
国外物联网平台初探(二) ——微软Azure IoT
查看>>
findlibrary returned null产生的联想,Android ndk开发打包时我们应该怎样注意平台的兼容(x86,arm,arm-v7a)...
查看>>
Android事件分发机制源代码分析
查看>>
《设计模式》结构型模式
查看>>
[javase学习笔记]-8.3 statickeyword使用的注意细节
查看>>
Spring集成RabbitMQ-使用RabbitMQ更方便
查看>>