java xss 参数_JAVA 重写HttpServletRequest的获取参数防止xss攻击
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攻击相关推荐
- java反射 获取方法参数名_java 反射借助 asm 获取参数名称最优雅简单的方式
背景说明 最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式. jdk7 及其以前,是无法通过反射获取参数名称的. jdk8 可以获取,但是要求指定 -parameter 启动参数,限 ...
- java中的命令行参数_Java中的命令行参数
java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...
- java 接收命令行参数_java中的命令行参数_Java中的命令行参数
java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...
- python从命令行获取参数_python从命令行获取参数操作
python从命令行获取参数 一: 简单用法 从命令行获取参数两种方式: 1.通过sys.argv参数获取:代码如下: # -*- coding: utf-8 -*- import sys #获取输入 ...
- php cli获取参数,php cli模式下获取参数的方法
PHP在cli模式下接收参数有两种方法 1.使用argv数组 2.使用getopt方法 1.使用argv数组 例如:需要执行一个php,并传递三个参数(type=news, is_hot=1, lim ...
- java 泛型反射_Java使用反射来获取泛型信息示例
本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...
- java反射 枚举_Java反射应用之获取枚举类的枚举
Java反射实际应用 实际工作中使用到的Java反射并不是很多,我接触到的基本上都是工具类中相对比较常用一些,本篇文章就是我实际工作中遇到的场景. 应用场景:一个审批流程第一个节点审批时,需要填写第二 ...
- c java 传参数_Java和C的方法参数传递方式的比较
java中的形参是复制实参的一份拷贝(对于引用类型则是复制引用的拷贝,在栈中的拷贝),所以在函数中改变形参是无法改变实参的值的,改变引用只是将形参所代表的引用指向另外的新的对象,而实参的引用还指向原来 ...
- 替代java参数_java – 使用Void作为可选参数的更好的替代方法
我有一个接口指定方法,它采用泛型类型作为输入,用于创建URL. interface UrlGenerator { String prepareUrl( T input ); } 有一个实现不需要参数. ...
- java midi 解析_Java从MIDI键盘获取输入
我已经用Java设计了自己的合成器,现在我想将其与Midi键盘连接.我在下面的课程搜索所有带有发射器的Midi设备.它成功找到了我的Midi键盘.我将自己的接收器添加到每个设备的每个发送器中,以便它可 ...
最新文章
- Object处理方法的返回值
- 工作112:空字符串引发的问题
- 怎么创建计算机快捷方式到桌面两种方法,使用脚本主机创建Windows快捷方式 - Windows Client | Microsoft Docs...
- Win10系统如何解除U盘写保护模式
- [深度学习]什么叫激活函数
- python autoitlibrary_记录RF安装AutoItLibrary库的辛酸过程
- hive 修改cluster by算法_Spark SQL连接 Hive源码深度剖析
- Web服务器性能压力测试工具
- 移动端屏幕宽度自适应原理及实现
- Leetcode(java)
- Vim插件(三) Terminal 终端
- 闲谈IPv6-组播和广播
- GNU、GCC与G++的区别
- 3到5年工作经验是如何回答面试中被问到的Java集合框架问题
- 哈利波特魔法游戏(原创)
- java实现文件上传功能详解
- 快手治理低质量直播内容,运营者需要注意什么?
- App启动界面加载自己想要的图片
- GIS创新实践【实验2】疫情地图制作与发布
- 音乐专业如何利用计算机思维,浅谈音乐思维方法运用