java 过滤器

import java.io.IOException;

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 com.soufun.wap.servlet.XSSRequestWrapper;

public class SqlXssFilter implements Filter {

private FilterConfig config = null; //配置文件(可以从 web中获取参数)

@Override

public void init(FilterConfig filterConfig) throws ServletException {

this.config = filterConfig;

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

//对不是 get请求和post 请求 进行拦截

if(!(req.getMethod().equalsIgnoreCase("get")||req.getMethod().equalsIgnoreCase("post"))) { //

return;

}

chain.doFilter(new XSSRequestWrapper(req), response); //放行

}

public void destroy() {

}

/**

* 获取敏感字

* 在 web.xml 中获取获取敏感字符所在的路径

* 在把它变为流 读进集合里面

*/

private List

getDirtyWords(){

List

dirtyWords = new ArrayList

(); String dirtyWordPath = config.getInitParameter("dirtyWord"); //获取参数值 InputStream inputStream = config.getServletContext().getResourceAsStream(dirtyWordPath); //传入路径变为流 InputStreamReader is = null; try { is = new InputStreamReader(inputStream,"UTF-8"); //把流转换为utf-8编码 } catch (UnsupportedEncodingException e2) { e2.printStackTrace(); } BufferedReader reader = new BufferedReader(is); String line; try { while ((line = reader.readLine())!= null) {//如果 line为空说明读完了 dirtyWords.add(line); //把敏感字符丢进集合里面 } } catch (IOException e) { e.printStackTrace(); } return dirtyWords; } }

装饰着模式 重写httpservlet中的方法

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.lang.StringEscapeUtils;

public class XSSRequestWrapper extends HttpServletRequestWrapper {

public XSSRequestWrapper(HttpServletRequest servletRequest) {

super(servletRequest);

}

/*

*重写getParameterValues方法

*/

@Override

public String[] getParameterValues(String parameter) {

String[] values = super.getParameterValues(parameter); //调用父类getParameterValues 获取原始值

if ("pageChildren".equals(parameter)) { //对原始值进行判断做出选择

return values;

}

if (values == null) {

return null;

}

int count = values.length;

String[] encodedValues = new String[count]; //创建一个字符数组

for (int i = 0; i < count; i++) {

encodedValues[i] = stripXSS(values[i]); //循坏替换 值中的关键字

}

return encodedValues;

}

/*

*重写getParameter方法方法

*/

@Override

public String getParameter(String parameter) {

String value = super.getParameter(parameter); //调用父类获取原始值

return stripXSS(value); //替换

}

/*

*对值中的关键字进行替换

*/

private String stripXSS(String value) {

if (null != value) {

value = value.replaceAll("", ">");

value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");

value = value.replaceAll("'", "'");

value = value.replaceAll("eval\\((.*)\\)", "");

value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");

value = value.replaceAll("script", "");

value = StringEscapeUtils.escapeSql(value);

}

return value;

}

}

web.xml

sqlXssFilter

com.soufun.wap.filter.SqlXssFilter

dirtyWord

/WEB-INF/DirtyWord.txt

sqlXssFilter

/*

java xss 参数_JAVA 重写HttpServletRequest的获取参数防止xss攻击相关推荐

  1. java反射 获取方法参数名_java 反射借助 asm 获取参数名称最优雅简单的方式

    背景说明 最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式. jdk7 及其以前,是无法通过反射获取参数名称的. jdk8 可以获取,但是要求指定 -parameter 启动参数,限 ...

  2. java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  3. java 接收命令行参数_java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  4. python从命令行获取参数_python从命令行获取参数操作

    python从命令行获取参数 一: 简单用法 从命令行获取参数两种方式: 1.通过sys.argv参数获取:代码如下: # -*- coding: utf-8 -*- import sys #获取输入 ...

  5. php cli获取参数,php cli模式下获取参数的方法

    PHP在cli模式下接收参数有两种方法 1.使用argv数组 2.使用getopt方法 1.使用argv数组 例如:需要执行一个php,并传递三个参数(type=news, is_hot=1, lim ...

  6. java 泛型反射_Java使用反射来获取泛型信息示例

    本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...

  7. java反射 枚举_Java反射应用之获取枚举类的枚举

    Java反射实际应用 实际工作中使用到的Java反射并不是很多,我接触到的基本上都是工具类中相对比较常用一些,本篇文章就是我实际工作中遇到的场景. 应用场景:一个审批流程第一个节点审批时,需要填写第二 ...

  8. c java 传参数_Java和C的方法参数传递方式的比较

    java中的形参是复制实参的一份拷贝(对于引用类型则是复制引用的拷贝,在栈中的拷贝),所以在函数中改变形参是无法改变实参的值的,改变引用只是将形参所代表的引用指向另外的新的对象,而实参的引用还指向原来 ...

  9. 替代java参数_java – 使用Void作为可选参数的更好的替代方法

    我有一个接口指定方法,它采用泛型类型作为输入,用于创建URL. interface UrlGenerator { String prepareUrl( T input ); } 有一个实现不需要参数. ...

  10. java midi 解析_Java从MIDI键盘获取输入

    我已经用Java设计了自己的合成器,现在我想将其与Midi键盘连接.我在下面的课程搜索所有带有发射器的Midi设备.它成功找到了我的Midi键盘.我将自己的接收器添加到每个设备的每个发送器中,以便它可 ...

最新文章

  1. Object处理方法的返回值
  2. 工作112:空字符串引发的问题
  3. 怎么创建计算机快捷方式到桌面两种方法,使用脚本主机创建Windows快捷方式 - Windows Client | Microsoft Docs...
  4. Win10系统如何解除U盘写保护模式
  5. [深度学习]什么叫激活函数
  6. python autoitlibrary_记录RF安装AutoItLibrary库的辛酸过程
  7. hive 修改cluster by算法_Spark SQL连接 Hive源码深度剖析
  8. Web服务器性能压力测试工具
  9. 移动端屏幕宽度自适应原理及实现
  10. Leetcode(java)
  11. Vim插件(三) Terminal 终端
  12. 闲谈IPv6-组播和广播
  13. GNU、GCC与G++的区别
  14. 3到5年工作经验是如何回答面试中被问到的Java集合框架问题
  15. 哈利波特魔法游戏(原创)
  16. java实现文件上传功能详解
  17. 快手治理低质量直播内容,运营者需要注意什么?
  18. App启动界面加载自己想要的图片
  19. GIS创新实践【实验2】疫情地图制作与发布
  20. 音乐专业如何利用计算机思维,浅谈音乐思维方法运用

热门文章

  1. 随手记_选方向读论文发论文相关
  2. 哈希函数的构造方法以及哈希表解决冲突的方式
  3. 马踏飞燕——奔跑在Docker上的Spark
  4. 《软件测试》实验一:测试入门
  5. Visio中插入公式
  6. 彻底抛弃脚本录制,LR脚本之使用web_custom_request函数自定义http请求
  7. ArcMap提取不规则线的坐标
  8. 快速中值滤波利用VC++和OpenCV调用其封装的动态链接库出现的错误和处理
  9. 魔方机器人之下位机编程----串口接收数据并解析
  10. 数据结构——单链表操作(一)——基础用法