代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
重写HttpServletRequest的获取参数防止xss攻击
作者:
天远
/ 发布于
2017/10/12
/
1070
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<String> getDirtyWords(){ List<String> dirtyWords = new ArrayList<String>(); 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("<", "<").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 <filter> <filter-name>sqlXssFilter</filter-name> <filter-class>com.soufun.wap.filter.SqlXssFilter</filter-class> <!-- 配置要过滤的敏感字符文件 --> <init-param> <param-name>dirtyWord</param-name> <param-value>/WEB-INF/DirtyWord.txt</param-value> </init-param> </filter> <filter-mapping> <filter-name>sqlXssFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
天远
贡献的其它代码
(
16
)
.
杀死所有脚本
.
小程序页面里要播放的音频的总时长
.
C#打开、保存图像
.
重写HttpServletRequest的获取参数防止xss攻击
.
获取ResultSet列数
.
显示路径下图片
.
返回字符串A的小写格式
.
多行多列数据转为一行
.
负载均衡算法
.
遍历实体的所有属性并为属性赋值
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3