防sql注入的过滤器

  1. 首先在web.xml中配置

<!-- 防sql注入过滤器 -->

<filter>

<filter-name>antiSqlInjection</filter-name>

<filter-class>com.usermanage.util.AntiSqlInjectionfilter</filter-class>

</filter>

<filter-mapping>

<filter-name>antiSqlInjection</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

2.具体逻辑实现

package com.usermanage.util;

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;

public class AntiSqlInjectionfilter implements Filter {

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest req=(HttpServletRequest)arg0;

HttpServletResponse res=(HttpServletResponse)arg1;

//获得所有请求参数名

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.setContentType("text/html;charset=utf-8");

res.getWriter().print("请不要尝试sql注入<br><a href=‘javascript:;‘ onclick=‘history.go(-1)‘>返回</a>");

// throw new IOException("您发送请求中的参数中含有非法字符");

//String ip = req.getRemoteAddr();

} else {

chain.doFilter(arg0,arg1);

}

}

//效验

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;

}

@Override

public void init(FilterConfig arg0) throws ServletException {

}

}

时间: 2024-11-07 06:23:02

防sql注入的过滤器的相关文章

Java 防SQL注入过滤器(拦截器)代码

原文出自:https://blog.csdn.net/seesun2012 前言 浅谈SQL注入: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,达到一定的非法用途. 解决办法 1.配置WEB-INF/web.xml <web-app> <welcome-file-list> <welcome-file>index.html</welcome-file> </welco

nginx服务器防sql注入/溢出攻击/spam及禁User-agents

本文章给大家介绍一个nginx服务器防sql注入/溢出攻击/spam及禁User-agents实例代码,有需要了解的朋友可进入参考. 在配置文件添加如下字段即可  代码如下 复制代码 server { ## 禁SQL注入 Block SQL injections set $block_sql_injections 0; if ($query_string ~ "union.*select.*(") { set $block_sql_injections 1; } if ($query_

C#语言Winform防SQl注入做用户登录的例子

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace OmyGod {     public partial

PHP防SQL注入攻击

PHP防SQL注入攻击 收藏 没有太多的过滤,主要是针对php和mysql的组合. 一般性的防注入,只要使用php的 addslashes 函数就可以了. 以下是一段copy来的代码: PHP代码 $_POST = sql_injection($_POST); $_GET = sql_injection($_GET); function sql_injection($content) { if (!get_magic_quotes_gpc()) { if (is_array($content))

在Global.asax文件里实现通用防SQL注入漏洞程序

首先,创建一个SQLInjectionHelper类完成恶意代码的检查 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text.RegularExpressions; /// <summary> ///SQLInjectionHelper 的摘要说明 /// </summary> public class SQLInjec

【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特别注意什么? 一.为何要优先使用PDO? PHP手册上说得很清楚: Prepared statements and stored procedures Many of the more mature databases support the concept of prepared statemen

防sql注入攻击

这两天看了个防sql注入,觉得有必要总结一下: 首先需要做一些php的安全配置: 1 在php.ini 中把display_errors改成OFF display_errors = OFF 或在php文件前加入 error_reporting(0) 2 关闭一些“坏功能” 1)关闭magic quotes功能 在php.ini 把magic_quotes_gpc = OFF 避免和addslashes等重复转义 2)关闭register_globals = Off 在php.ini 把regis

自定义防SQL注入函数

/************************************************ *SQL防注入函数 *@time 2014年6月24日18:50:59 * */ public function safe_replace($string){ $string = str_replace('%20','',$string); $string = str_replace('%27','',$string); $string = str_replace('%2527','',$stri

C#使用带like的sql语句时防sql注入的方法

本文实例叙述了在拼接sql语句的时候,如果遇到Like的情况该怎么办. 一般采用带like的SQL语句进行简单的拼接字符串时,需要开率遇到sql注入的情况.这确实是个需要注意的问题. 这里结合一些查阅的资料做了初步的整理. 如这样一个sql语句: select * from game where gamename like '%张三%' 用c#表示的话: string keywords = "张三"; StringBuilder strSql=new StringBuilder();