0.注意:此方法只针对controller 中有明确参数名的参数有效,对于从httpservletrequest中取出来的参数不起作用【典型例如固件上传,从request中取出参数就不进行验证】

1.简述问题

  1. 前后空格
  2. 非法字符
  3. XSS注入

2. 问题产生的途径

  1. HTML页面参数提交
  2. APP参数提交
  3. 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表单等提交参数前后去除空白处理相关推荐

  1. js实现Form表单submit提交截获数据(各浏览器通用)

    js实现Form表单submit提交截获数据(各浏览器通用) js实现Form表单submit提交截获数据(各浏览器通用) No Comments | js , 安全 , PHP | by calms ...

  2. 使用ajax方法实现form表单的提交

    2019独角兽企业重金招聘Python工程师标准>>> 在使用form表单的时候,一旦点击提交触发submit事件,一般会使得页面跳转,页面间的跳转等行为的控制权往往在后端,后端会控 ...

  3. 用js将form表单同时提交到两个不同页面的方法

    用js将form表单同时提交到两个不同页面的方法: <script type="text/javascript"> function dosubmit(){ windo ...

  4. form表单重复提交

    现象: 后台完成数据库操作后返回到页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交 原因: 第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其它页面才消失,在自 ...

  5. .form文件_含文件上传的form表单AJAX提交小结

    最近在学习PHP时,遇到不知道如何含文件上传的form表单AJAX提交,现在把这些记录下来以备自己后续复习时用: HTML代码 *姓名: *性别: {eq name='list.sex' value= ...

  6. form表单同时提交带文本和图片的数据

    方法一:使用ajax异步提交 此种方法的好处是可以回调响应结果. html代码: <form action="${basePath}/save" method="p ...

  7. 防止Form表单重复提交的客户端及服务器端的方式

    参考:https://www.cnblogs.com/xdp-gacl/p/3859416.html 上文只是介绍了form表单提交,没有介绍form表单异步提交 上文只是介绍了单个Servlet的处 ...

  8. vue的form表单在提交成功后置空

    vue的form表单在提交成功后置空 form表单 说明 :form表单加上属性值 ref="form" 点击事件加入 roleManager.$refs['form'].rese ...

  9. html表单通过js提交表单提交,JavaScript动态创建form表单并提交的实现方法

    本文实例讲述了JavaScript动态创建form表单并提交的实现方法.分享给大家供大家参考,具体如下: 页面布局有些复杂的情况下,可能需要在页面中动态创建一个 form,JavaScript 创建 ...

最新文章

  1. 也谈Hashtable
  2. Linux / 设置和查看环境变量的方法
  3. 机器学习算法在自动驾驶领域的应用大盘点!
  4. PAT 1065 A+B and C[大数运算][溢出]
  5. .NET 大会今日开幕 |这些白嫖福利不看肠子都悔青
  6. centos7升级gcc到5.3.0
  7. 使用node的pm2管理相关进程
  8. s7-300 400plc应用技术_西门子S7300/400顺序功能图设计教程,看完豁然开朗!
  9. 【kafka】kafka 新增节点 报错 InconsistentBrokerIdException Configured broker.id doesn‘t match
  10. Python爱心表白代码
  11. 田刚:庞加莱猜想与几何
  12. ddgr:一个从终端搜索 DuckDuckGo 的命令行工具
  13. 什么是迭代式项目开发
  14. 学生信息管理系统之查:查询成绩信息流程
  15. m4a转mp3简单的音频转换方法?
  16. Android APK安装常见错误列表
  17. element ui el-dialog子组件放到表格中title一直居中
  18. 大学期间能考的计算机证书,大学期间可以考的证书,含金量,很有用
  19. MySQL常见错误码
  20. registration.setOrder

热门文章

  1. 书柜例子解释整理表空间碎片
  2. 阿里云账号如何个人实名?
  3. win10自带剪切板快捷键(效率提高很多呀)
  4. ROCBOSS开源免费微社区轻论坛类源码
  5. 能勾起你美好回忆的英文经典情歌二十首!绝对经典!
  6. 2018-11-21 枷锁
  7. 【Remote Development】VSCode 基于 SSH 进行远程开发
  8. 程序员做外包能转正吗?外包员工能变正式员工吗?
  9. Re5ilio 5ync:资源神器
  10. 《MySQL高级篇》八、索引优化与查询优化