java防止脚本注入,通过拦截器实现
1:利用action过滤
package com.tsou.comm.servlet; import java.util.Enumeration;
import java.util.Map;
import java.util.Vector; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
*
* <p class="detail">
* 功能:封装的请求处理特殊字符
* </p>
* @ClassName: TsRequest
* @version V1.0
* @date 2014年9月25日
* @author wangsheng
*/
public class TsRequest extends HttpServletRequestWrapper {
private Map params; public TsRequest(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
} public Map getParameterMap() {
return params ;
} public Enumeration getParameterNames() {
Vector l = new Vector( params.keySet());
return l.elements();
} public String[] getParameterValues(String name) {
Object v = params.get(name);
if (v == null ) {
return null ;
} else if (v instanceof String[]) {
String[] value = (String[]) v;
for (int i = 0; i < value.length; i++) {
value[i] = value[i].replaceAll( "<", "<" );
value[i] = value[i].replaceAll( ">", ">" );
}
return (String[]) value;
} else if (v instanceof String) {
String value = (String) v;
value = value.replaceAll( "<", "<" );
value = value.replaceAll( ">", ">" );
return new String[] { (String) value };
} else {
return new String[] { v.toString() };
}
} public String getParameter(String name) {
Object v = params.get(name);
if (v == null ) {
return null ;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
String value = strArr[0];
value = value.replaceAll( "<", "<" );
value = value.replaceAll( "<", ">" );
return value;
} else {
return null ;
}
} else if (v instanceof String) {
String value = (String) v;
value = value.replaceAll( "<", "<" );
value = value.replaceAll( ">", ">" );
return (String) value;
} else {
return v.toString();
}
}
}
2:利用拦截器过滤
package com.kadang.wp.mobile.wap.core.common; 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; import org.apache.commons.lang3.StringUtils; /**
* XSS 检查过滤器
*
* @author jianghao
* @date 2014-08-22
*
*/ public class XSSCheckFilter implements Filter {
// 需要拦截的JS字符关键字 private String errorPath;
// 非法xss 字符
private static String[] SAFE_LESS = { "set-cookie", "<", "%3c", "%3e", ">", "\\" }; @Override
public void init(FilterConfig filterConfig) throws ServletException {
this.setErrorPath(filterConfig.getInitParameter("errorPath"));
} @Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
ServletException {
boolean isSafe = true; Enumeration<?> params = req.getParameterNames();
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String requestUrl = request.getRequestURI(); if (isSafeStr(requestUrl)) {
while (params.hasMoreElements()) {
String paramKey = (String) params.nextElement();
String paramValue = request.getParameter(paramKey);
if (StringUtils.isNotBlank(paramValue)) {
if (!isSafeStr(paramValue)) {
isSafe = false;
break;
}
} }
} else {
isSafe = false;
} if (isSafe) {
chain.doFilter(req, resp);
} else {
request.setAttribute("error", "url or params is full of illegal XSS character");
request.getRequestDispatcher(this.getErrorPath()).forward(request, response);
return;
}
} /**
* 判断URL是否存在非法字符
* */
private boolean isSafeStr(String str) {
if (StringUtils.isNotBlank(str)) {
for (String s : SAFE_LESS) {
if (str.toLowerCase().contains(s)) {
return false;
}
}
}
return true;
} @Override
public void destroy() { } public String getErrorPath() {
return errorPath;
} public void setErrorPath(String errorPath) {
this.errorPath = errorPath;
}
}
3:利用拦截器拦截URL
<filter>
<filter-name> characterFilter</filter-name >
<filter-class> com.tsou.comm.filter.CharacterFilter</filter-class >
</filter>
<filter-mapping>
<filter-name> characterFilter</filter-name >
<url-pattern> /*</ url-pattern>
</filter-mapping>
java防止脚本注入,通过拦截器实现的更多相关文章
- Java Servlet 过滤器与 springmvc 拦截器的区别?
前言:在工作中,遇到需要记录日志的情况,不知道该选择过滤器还是拦截器,故总结了一下. servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取.过滤器的工作方式分为四种 应用场景 ...
- Java 过滤器、监听器、拦截器的区别
原文:http://www.360doc.com/content/10/0601/09/495229_30616324.shtml 1.过滤器 Servlet中的过滤器Filter是实现了ja ...
- struts2 参数注入 方法拦截器
web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=" ...
- Java过滤器(Filter)与SpringMVC拦截器(Interceptor)之间的关系与区别
过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对action请求起作用,而过滤 ...
- 【java web】过滤器、拦截器、监听器的区别
一.对比: 1.1 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对actio ...
- Java Web 中 过滤器与拦截器的区别
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...
- [Abp vNext 源码分析] - 3. 依赖注入与拦截器
一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架 ...
- java框架之Struts2(4)-拦截器&标签库
拦截器 概述 Interceptor (拦截器):起到拦截客户端对 Action 请求的作用. Filter:过滤器,过滤客户端向服务器发送的请求. Interceptor:拦截器,拦截的是客户端对 ...
- java框架篇---struts实现拦截器
Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...
随机推荐
- MCS-51系列特殊功能寄存器(摘抄)
1. P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 2.SP 栈指针(81H) 3.DPTR 数据指针(由DPH和DPL组成) DPL 数据指针低八 ...
- 初识ASP.NET CORE:三、Middleware
Middleware are simpler than HTTP modules and handlers:Modules, handlers, Global.asax.cs, Web.config ...
- linux 下搭建 storm
搭建storm 需要搭建: 1.zookeeper 搭建 2.下载/安装 storm 的依赖包 zeromq, jzmq,python 2.storm 搭建 一.Zookeeper 安装 下载安装 ...
- NX图标
可以从%UGII_BASE_DIR%\ugii\menus目录下men文件或TBR文件中查找 关键字BITMAP 对应的名称
- Oracle 游标使用
今天看到一篇很帮的游标,所以强烈转一下 http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html -- 声明游标:CURSOR curs ...
- 使用my exclipse对数据库进行操作(1)
一.查找 public class class1 { public static void main(String[] args) { // TODO Auto-generated method st ...
- 教你把UltraEdit如何注册激活教程及UltraEdit 22.0.0.48 官方中文版下载
UltraEdit 22.0.0.48 官方中文版下载:链接: http://pan.baidu.com/s/1i3f7mZV 密码: r23v2015-5-30号更新 第一.关闭网络连接(或者直接拔 ...
- 《LINUX内核设计与实现》读书笔记之第一章和第二章
一.第一章 1. Unix内核的特点简洁:仅提供系统调用并有一个非常明确的设计目的抽象:几乎所有东西都被当做文件可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力进程:创建 ...
- 解决Win7下打不开chm文件的方法
win7 无法打开chm操作如下:1,在命令行运行regsvr32 itss.dll2,在命令行运行regsvr32 hhctrl.ocx
- [转]moveTaskToback退后台
http://blog.csdn.net/dacainiao007/article/details/17352367 方法:public boolean moveTaskToBack(boolean ...