java sql注入 过滤器_java 过滤器filter防sql注入 | 学步园
XSSFilter.java
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
//flag = true 只做URL验证; flag = false 做所有字段的验证;
boolean flag = true;
if(flag){
//只对URL做xss校验
HttpServletRequest httpServletRequest = (HttpServletRequest) servletrequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletresponse;
String requesturi = httpServletRequest.getRequestURL().toString();
requesturi = URLDecoder.decode(requesturi, "UTF-8");
if(requesturi!=null&&requesturi.indexOf("alipay_hotel_book_return.html")!=-1){
filterchain.doFilter(servletrequest, servletresponse);
return;
}
if(requesturi!=null&&requesturi.indexOf("account_bank_return.html")!=-1){
filterchain.doFilter(servletrequest, servletresponse);
return;
}
if(requesturi!=null&&requesturi.indexOf("/alipay/activity.html")!=-1){
filterchain.doFilter(servletrequest, servletresponse);
return ;
}
if(requesturi!=null&&requesturi.indexOf("/alipayLogin.html")!=-1){
filterchain.doFilter(servletrequest, servletresponse);
return ;
}
RequestWrapper rw = new RequestWrapper(httpServletRequest);
String param = httpServletRequest.getQueryString();
if(!"".equals(param) && param != null) {
param = URLDecoder.decode(param, "UTF-8");
String originalurl = requesturi + param;
String sqlParam = param;
//添加sql注入的判断
if(requesturi.endsWith("/askQuestion.html") || requesturi.endsWith("/member/answer.html")){
sqlParam = rw.cleanSQLInject(param);
}
String xssParam = rw.cleanXSS(sqlParam);
requesturi += "?"+xssParam;
if(!xssParam.equals(param)){
System.out.println("requesturi::::::"+requesturi);
httpServletResponse.sendRedirect(requesturi);
System.out.println("no entered.");
//filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);
return ;
}
}
filterchain.doFilter(servletrequest, servletresponse);
}else{
//对请求中的所有东西都做校验,包括表单。此功能校验比较严格容易屏蔽表单正常输入,使用此功能请注意。
filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);
}
}
requestMapping:
public RequestWrapper(){
super(null);
}
public RequestWrapper(HttpServletRequest httpservletrequest) {
super(httpservletrequest);
}
public String[] getParameterValues(String s) {
String str[] = super.getParameterValues(s);
if (str == null) {
return null;
}
int i = str.length;
String as1[] = new String[i];
for (int j = 0; j < i; j++) {
as1[j] = cleanXSS(cleanSQLInject(str[j]));
}
return as1;
}
public String getParameter(String s) {
String s1 = super.getParameter(s);
if (s1 == null) {
return null;
} else {
return cleanXSS(cleanSQLInject(s1));
}
}
public String getHeader(String s) {
String s1 = super.getHeader(s);
if (s1 == null) {
return null;
} else {
return cleanXSS(cleanSQLInject(s1));
}
}
public String cleanXSS(String src) {
String temp =src;
System.out.println("xss---temp-->"+src);
src = src.replaceAll("", ">");
// if (src.indexOf("address")==-1)
//{
src = src.replaceAll("\\(", "(").replaceAll("\\)", ")");
//}
src = src.replaceAll("'", "'");
Pattern pattern=Pattern.compile("(eval\\((.*)\\)|script)",Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(src);
src = matcher.replaceAll("");
pattern=Pattern.compile("[\\\"\\'][\\s]*javascript:(.*)[\\\"\\']",Pattern.CASE_INSENSITIVE);
matcher=pattern.matcher(src);
src = matcher.replaceAll("\"\"");
//增加脚本
src = src.replaceAll("script", "").replaceAll(";", "")
.replaceAll("\"", "").replaceAll("@", "")
.replaceAll("0x0d", "")
.replaceAll("0x0a", "").replaceAll(",", "");
if(!temp.equals(src)){
System.out.println("输入信息存在xss攻击!");
System.out.println("原始输入信息-->"+temp);
System.out.println("处理后信息-->"+src);
}
return src;
}
//需要增加通配,过滤大小写组合
public String cleanSQLInject(String src) {
String temp =src;
src = src.replaceAll("insert", "forbidI")
.replaceAll("select", "forbidS")
.replaceAll("update", "forbidU")
.replaceAll("delete", "forbidD")
.replaceAll("and", "forbidA")
.replaceAll("or", "forbidO");
if(!temp.equals(src)){
System.out.println("输入信息存在SQL攻击!");
System.out.println("原始输入信息-->"+temp);
System.out.println("处理后信息-->"+src);
}
return src;
}
xml配置:
XssFilter
cn.com.jsoft.xss.XSSFilter
encoding
UTF-8
XssFilter
/*
以上代码仅仅将特殊的sql字符,特殊script脚本字符处理掉,具体的页面处理还需要后台处理!!
java sql注入 过滤器_java 过滤器filter防sql注入 | 学步园相关推荐
- java libraries在哪_java.library.path在哪? | 学步园
编译运行可得 Code: publicclassHelloWorld{ publicstaticvoidmain(String args[]){ System.out.println("He ...
- java socket超时时间_java中socket 默认超时时间 | 学步园
MS:永远吧 Java代码 connect publicvoidconnect(SocketAddress endpoint, inttimeout) throwsIOException Connec ...
- java 中的点_java————形参中的点点点 | 学步园
转自:http://zhidao.baidu.com/question/149668626.html main方法的签名其实可以这样写: public static void main(String. ...
- java注解获取参数_JAVA 自定义注解及参数获取 | 学步园
package com.java.annotation; import java.lang.annotation.*; /** * Created by lw on 14-5-30. * 自定义注解 ...
- java 修改ini文件_java读取和修改ini配置文件 | 学步园
/* * ConfigurationFile.java * * Created on 2009年4月15日, 下午1:36 * * To change this template, choose To ...
- java 反斜杠_java反斜杠\的用法 | 学步园
java反斜杠\的用法比较怪异,分为两种场景: 1. 正则表达式 匹配点(.) 或 {.[.(.?.$.^ .+和 * 这些特殊符号要要前加双斜框,表示字符类的时候也是用双斜杠譬如(\\s[空白符] ...
- java数组长度最大值_java 数组排序、最大值、最小值 | 学步园
原文:http://liyaxi.iteye.com/blog/856334 public class ArraysTest { /** * 数组排序 * 数组中的最大值 * 数组中的最小值 */ p ...
- java打开db文件_java 读取DB.properties文件方式 | 学步园
读properties文件的时候,出现了或多或少的奇怪问题,这里把最终成功的方式描述一下. PropUtil工具类 public class PropUtil { private String fil ...
- filter过滤器_Java过滤器Filter讲解(Java基础)
Java过滤器Filter讲解(Java基础) 双体的小伙伴们,Java过滤器Filter讲解(Java基础).初学JAVA的的学者们,今天满满的干货,跟随我一起学习吧. 超能就在这里 ...
- mysql超长sql查询_超长SQL怎么查询?MySQL列长度限制有哪些 | 学步园
MySQL字符串的限制长度看似重要性不要,其实和整个MySQL数据库的安全性是息息相关的,很值得我们去深入研究分析.SQL注入攻击一直都在被广泛的讨论,然而人们却忽略了今天我将要介绍的这两个安全隐患, ...
最新文章
- 使用java实现类似nc的功能_在FANUC机器人中使用后台运行逻辑实现PLC功能
- python定义x_Python 定义函数(示例代码)
- R语言观察日志(part3)--repeat循环
- Ubuntu20.04 服务器版安装
- 3d激光雷达开发(生成RangeImage)
- 查看ssis执行日志_SSIS包日志记录概述
- Spring boot 搭建
- 我们写APP和小程序或者H5用的前端UI--ColorUI
- 什么是敏捷项目合同管理?
- python处理图片文件,python 间接处理webp图片文件
- SECS协议的SML表示
- 002_simulink中显示模块中的名字
- 加密字符 【问题描述】 在情报传递过程中,为了防止情报被截获,往往需要用一定的方式对情报进行加密。简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易识别
- mac运行ps特别慢_Mac Mac运行越来越慢?变卡顿?试试看这些加快小诀窍!
- arm裸机与嵌入式linux驱动开发,如何编写基于ARM的裸机程序和基于Linux的驱动程序?...
- Windows Hook 易语言核心编程勾子基本理念
- 怎么用计算机打吃鸡,想要用电脑玩绝地求生手游吗?这几个模拟器满足你
- 网站建设学习(九)——JavaScript基础语法(上)
- zsh 缺少 /usr/local/share/zsh/site-functions/_brew_cask
- bugku:游戏过关