excel导入非法字符处理,form表单等提交参数前后去除空白处理
0.注意:此方法只针对controller 中有明确参数名的参数有效,对于从httpservletrequest中取出来的参数不起作用【典型例如固件上传,从request中取出参数就不进行验证】
1.简述问题
- 前后空格
- 非法字符
- XSS注入
2. 问题产生的途径
- HTML页面参数提交
- APP参数提交
- Excel数据导入
3. 处理问题
对于提交的参数可以简单的在filter中统一处理,而Excel导入数据则在处理Excel文档时处理。
3.1 封装非法字符处理方法
public static String handleIllegalCharacter(String s) {if (StringUtils.isEmpty(s)) {return s;}// 前后空格s = s.trim();//去除:空格\s,回车\n,水平制表符即tab \t,换行\rPattern p = Pattern.compile("\\s|\n|\t|\r");Matcher m = p.matcher(s);s = m.replaceAll("");// Excel文档中非法字符if (s.contains("\u202C")) {s = s.replace("\u202C", "").trim();}if (s.contains("\u202D")) {s = s.replace("\u202D", "").trim();}if (s.contains("\u202E")) {s = s.replace("\u202E", "").trim();}s = HtmlUtils.htmlEscape(s, "UTF-8");s = JavaScriptUtils.javaScriptEscape(s);return s;
}
\u202C,\u202D,\u202E是Excel文档中的非法字符,怀疑和Excel文档格式有关。 HtmlUtils.htmlEscapeDecimal(String input, String encoding)和JavaScriptUtils.javaScriptEscape(String input)调用的是spring-web中的方法。
3.2 filter处理提交参数
在filter中对所有提交参数做处理
package com.bugull.farm.core.filter;import com.bugull.farm.core.utils.StringUtil;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author wangdi* @date 2017/12/19*/
public class EmptyStringTrimFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {filterChain.doFilter(new TrimEmptyStringRequest(request), response);}private String trimEmptyString(String value) {return StringUtil.handleIllegalCharacter(value);}class TrimEmptyStringRequest extends HttpServletRequestWrapper {/*** Constructs a request object wrapping the given request.** @param request* @throws IllegalArgumentException if the request is null*/public TrimEmptyStringRequest(HttpServletRequest request) {super(request);}@Overridepublic String[] getParameterValues(String name) {String[] parameterValues = super.getParameterValues(name);if (ArrayUtils.isNotEmpty(parameterValues)) {for (int i = 0; i < parameterValues.length; i++) {parameterValues[i] = trimEmptyString(parameterValues[i]);}}return parameterValues;}}}
3.2.1 XML配置filter
<filter><filter-name>emptyStringTrimFilter</filter-name><filter-class>com.bugull.farm.web.filter.EmptyStringTrimFilter</filter-class>
</filter>
<filter-mapping><filter-name>emptyStringTrimFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
3.2.2 Java Config配置filter
@Configuration
@Log4j2
public class WebConfig implements WebMvcConfigurer {@Beanpublic FilterRegistrationBean filterRegistrationBean() {log.info("Initializing EmptyStringTrimFilter");FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>();filterFilterRegistrationBean.addUrlPatterns("/*");filterFilterRegistrationBean.setName("emptyStringTrimFilter");filterFilterRegistrationBean.setFilter(new EmptyStringTrimFilter());return filterFilterRegistrationBean;}}
3.3 Excel文档处理
同样的在处理Excel文档时调用StringUtil.handleIllegalCharacter(String s)方法即可
excel导入非法字符处理,form表单等提交参数前后去除空白处理相关推荐
- js实现Form表单submit提交截获数据(各浏览器通用)
js实现Form表单submit提交截获数据(各浏览器通用) js实现Form表单submit提交截获数据(各浏览器通用) No Comments | js , 安全 , PHP | by calms ...
- 使用ajax方法实现form表单的提交
2019独角兽企业重金招聘Python工程师标准>>> 在使用form表单的时候,一旦点击提交触发submit事件,一般会使得页面跳转,页面间的跳转等行为的控制权往往在后端,后端会控 ...
- 用js将form表单同时提交到两个不同页面的方法
用js将form表单同时提交到两个不同页面的方法: <script type="text/javascript"> function dosubmit(){ windo ...
- form表单重复提交
现象: 后台完成数据库操作后返回到页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交 原因: 第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其它页面才消失,在自 ...
- .form文件_含文件上传的form表单AJAX提交小结
最近在学习PHP时,遇到不知道如何含文件上传的form表单AJAX提交,现在把这些记录下来以备自己后续复习时用: HTML代码 *姓名: *性别: {eq name='list.sex' value= ...
- form表单同时提交带文本和图片的数据
方法一:使用ajax异步提交 此种方法的好处是可以回调响应结果. html代码: <form action="${basePath}/save" method="p ...
- 防止Form表单重复提交的客户端及服务器端的方式
参考:https://www.cnblogs.com/xdp-gacl/p/3859416.html 上文只是介绍了form表单提交,没有介绍form表单异步提交 上文只是介绍了单个Servlet的处 ...
- vue的form表单在提交成功后置空
vue的form表单在提交成功后置空 form表单 说明 :form表单加上属性值 ref="form" 点击事件加入 roleManager.$refs['form'].rese ...
- html表单通过js提交表单提交,JavaScript动态创建form表单并提交的实现方法
本文实例讲述了JavaScript动态创建form表单并提交的实现方法.分享给大家供大家参考,具体如下: 页面布局有些复杂的情况下,可能需要在页面中动态创建一个 form,JavaScript 创建 ...
最新文章
- 也谈Hashtable
- Linux / 设置和查看环境变量的方法
- 机器学习算法在自动驾驶领域的应用大盘点!
- PAT 1065 A+B and C[大数运算][溢出]
- .NET 大会今日开幕 |这些白嫖福利不看肠子都悔青
- centos7升级gcc到5.3.0
- 使用node的pm2管理相关进程
- s7-300 400plc应用技术_西门子S7300/400顺序功能图设计教程,看完豁然开朗!
- 【kafka】kafka 新增节点 报错 InconsistentBrokerIdException Configured broker.id doesn‘t match
- Python爱心表白代码
- 田刚:庞加莱猜想与几何
- ddgr:一个从终端搜索 DuckDuckGo 的命令行工具
- 什么是迭代式项目开发
- 学生信息管理系统之查:查询成绩信息流程
- m4a转mp3简单的音频转换方法?
- Android APK安装常见错误列表
- element ui el-dialog子组件放到表格中title一直居中
- 大学期间能考的计算机证书,大学期间可以考的证书,含金量,很有用
- MySQL常见错误码
- registration.setOrder