JSP过滤器防止SQL注入
来源:互联网 发布:js实现分页思路 编辑:程序博客网 时间:2024/05/17 06:12
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏
忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。
filter功能.它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够
在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet
chaining”(servlet 链). 所以用户发出的任何request都必然经过filter处理,我们就在filter处理用户request包含的敏感关
键字,然后replace掉或是让页面转到错误页来提示用户,这样就可以很好的防sql注入了。
具体代码:
SqlFilter.java
package com.xyl.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;import javax.servlet.http.HttpServletResponse;/*** 过滤sql关键字的Filter* @author*/public class SqlFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; //获得所有请求参数名 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)) { res.sendRedirect("error.html"); //String ip = req.getRemoteAddr(); } else { chain.doFilter(req, res); } } //效验 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"; String badStr = "'|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]) !=-1) { return true; } } return false; } public void init(FilterConfig filterConfig) throws ServletException { //throw new UnsupportedOperationException("Not supported yet."); } public void destroy() { //throw new UnsupportedOperationException("Not supported yet."); }}
<!-- sql Filter --> <filter> <filter-name>SqlFilter</filter-name> <filter-class>com.xyl.filter.SqlFilter</filter-class> </filter> <filter-mapping> <filter-name>SqlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
1 0
- JSP过滤器防止SQL注入
- JSP使用过滤器防止SQL注入
- 过滤器防止SQL注入
- jsp防止sql语句注入
- 防止 jsp被sql注入
- java类过滤器,防止页面sql注入
- struts过滤器,防止页面sql注入
- java类过滤器,防止页面sql注入
- java类过滤器,防止页面sql注入
- java类过滤器,防止页面sql注入
- java类过滤器,防止页面SQL注入
- 字符过滤器和防止XSS攻击,SQL注入的过滤器
- jsp 防止sql注入 和 arp中毒
- jsp 防止sql注入 之 preparestatement篇
- JSP网页防止sql注入攻击
- 防止常见XSS 过滤 SQL注入 JAVA过滤器filter
- 使用过滤器防止简单的页面SQL注入
- 过滤器防止地址栏注入登录
- File操作:写文件、读文件、文件追加
- 控制台和终端
- Learning Effective C++
- iOS常用加密方法(aes、md5、base64)
- 01.cocos2d-x游戏引擎的底层实现(引言)
- JSP过滤器防止SQL注入
- 生活技巧
- Linux音频编程指南
- POJ 3348 Cows (凸包面积)
- Linux Shell常用技巧(一)
- 编程语言编年史
- Hibernate旅程(一)Hibernate架构概述
- Android中asset文件夹和raw文件夹区别
- Http Session and PortletSession的关系