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注入 | 学步园相关推荐

  1. java libraries在哪_java.library.path在哪? | 学步园

    编译运行可得 Code: publicclassHelloWorld{ publicstaticvoidmain(String args[]){ System.out.println("He ...

  2. java socket超时时间_java中socket 默认超时时间 | 学步园

    MS:永远吧 Java代码 connect publicvoidconnect(SocketAddress endpoint, inttimeout) throwsIOException Connec ...

  3. java 中的点_java————形参中的点点点 | 学步园

    转自:http://zhidao.baidu.com/question/149668626.html main方法的签名其实可以这样写: public static void main(String. ...

  4. java注解获取参数_JAVA 自定义注解及参数获取 | 学步园

    package com.java.annotation; import java.lang.annotation.*; /** * Created by lw on 14-5-30. * 自定义注解 ...

  5. java 修改ini文件_java读取和修改ini配置文件 | 学步园

    /* * ConfigurationFile.java * * Created on 2009年4月15日, 下午1:36 * * To change this template, choose To ...

  6. java 反斜杠_java反斜杠\的用法 | 学步园

    java反斜杠\的用法比较怪异,分为两种场景: 1. 正则表达式 匹配点(.) 或  {.[.(.?.$.^ .+和 * 这些特殊符号要要前加双斜框,表示字符类的时候也是用双斜杠譬如(\\s[空白符] ...

  7. java数组长度最大值_java 数组排序、最大值、最小值 | 学步园

    原文:http://liyaxi.iteye.com/blog/856334 public class ArraysTest { /** * 数组排序 * 数组中的最大值 * 数组中的最小值 */ p ...

  8. java打开db文件_java 读取DB.properties文件方式 | 学步园

    读properties文件的时候,出现了或多或少的奇怪问题,这里把最终成功的方式描述一下. PropUtil工具类 public class PropUtil { private String fil ...

  9. filter过滤器_Java过滤器Filter讲解(Java基础)

    Java过滤器Filter讲解(Java基础)    双体的小伙伴们,Java过滤器Filter讲解(Java基础).初学JAVA的的学者们,今天满满的干货,跟随我一起学习吧.      超能就在这里 ...

  10. mysql超长sql查询_超长SQL怎么查询?MySQL列长度限制有哪些 | 学步园

    MySQL字符串的限制长度看似重要性不要,其实和整个MySQL数据库的安全性是息息相关的,很值得我们去深入研究分析.SQL注入攻击一直都在被广泛的讨论,然而人们却忽略了今天我将要介绍的这两个安全隐患, ...

最新文章

  1. 使用java实现类似nc的功能_在FANUC机器人中使用后台运行逻辑实现PLC功能
  2. python定义x_Python 定义函数(示例代码)
  3. R语言观察日志(part3)--repeat循环
  4. Ubuntu20.04 服务器版安装
  5. 3d激光雷达开发(生成RangeImage)
  6. 查看ssis执行日志_SSIS包日志记录概述
  7. Spring boot 搭建
  8. 我们写APP和小程序或者H5用的前端UI--ColorUI
  9. 什么是敏捷项目合同管理?
  10. python处理图片文件,python 间接处理webp图片文件
  11. SECS协议的SML表示
  12. 002_simulink中显示模块中的名字
  13. 加密字符 【问题描述】 在情报传递过程中,为了防止情报被截获,往往需要用一定的方式对情报进行加密。简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易识别
  14. mac运行ps特别慢_Mac Mac运行越来越慢?变卡顿?试试看这些加快小诀窍!
  15. arm裸机与嵌入式linux驱动开发,如何编写基于ARM的裸机程序和基于Linux的驱动程序?...
  16. Windows Hook 易语言核心编程勾子基本理念
  17. 怎么用计算机打吃鸡,想要用电脑玩绝地求生手游吗?这几个模拟器满足你
  18. 网站建设学习(九)——JavaScript基础语法(上)
  19. zsh 缺少 /usr/local/share/zsh/site-functions/_brew_cask
  20. bugku:游戏过关

热门文章

  1. 对C#中事件的简单理解
  2. 【转】勤奋小孩的遗言:没有理由不坚持。
  3. [译]应用内搜索功能实现 Android TV应用程序手册教程十三
  4. cmd命令关闭占用程序的端口
  5. windows server 2003产生的 Minidmp蓝屏文件分析求助
  6. jquery特效 商品SKU属性规格选择实时联动
  7. 进入Python的多彩世界
  8. Web 网页开发的一点心得
  9. [leetcode]Two Sum @ Python
  10. CentOS 6.4下CDH4集群安装(1)