`
cloudtech
  • 浏览: 4595831 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

spring mvc数据绑定时通过去除html标签防止js注入

 
阅读更多

现在做的项目之前没有考虑到js注入的问题,现在想通过在spring对数据进行绑定时,去除html标签来在后端防止js注入,首先先研读它的源码,我们大部分controller都是扩展MultiActionController这个类,用到的是bind(HttpServletRequest request, Object command)这个方法,它是通过调用createBinder方法创建ServletRequestDataBinder类来进行数据绑定,ServletRequestDataBinder类里面的getInternalBindingResult方法就是返回绑定的结果,我们可以在这方法里面加上自己的属性编辑器(扩展PropertyEditorSupport类)对参数进行处理,于是实现的步骤是:1、写个扩展PropertyEditorSupport类的字符串处理类 2、定义自定义ServletRequestDataBinder,重写getInternalBindingResult方法,3、扩展MultiActionController,重写createBinder方法。

1.StringEditor类

public class StringEditor extends PropertyEditorSupport{

  @Override
  public void setAsText(String text) throws IllegalArgumentException {
      if (text == null || (text = text.trim()).length() == 0) {
          return;
      }
      try {
        //去除html标签
        String str = text.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", "")   
                         .replaceAll("</[a-zA-Z]+[1-9]?>", "");  
          setValue(str);
      } catch (Exception e) {
          throw new IllegalArgumentException(e);
      }
  }
}


2.CustomRequestDataBinder类

public class CustomRequestDataBinder extends ServletRequestDataBinder {

  public CustomRequestDataBinder(Object target) {
    super(target);
  }

  public CustomRequestDataBinder(Object target, String objectName) {
    super(target, objectName);
  }

  @Override
  protected AbstractPropertyBindingResult getInternalBindingResult() {
      AbstractPropertyBindingResult bindingResult = super.getInternalBindingResult();

      PropertyEditorRegistry registry = bindingResult.getPropertyEditorRegistry();
      registry.registerCustomEditor(String.class, new StringEditor());

      return bindingResult;
  }
}


3.CustomMultiActionController 类

public class CustomMultiActionController extends MultiActionController{
  
  @Override
  public ServletRequestDataBinder createBinder(HttpServletRequest request, Object command) throws Exception {
    CustomRequestDataBinder binder = new CustomRequestDataBinder(command, getCommandName(command));
    initBinder(request, binder);
    return binder;
  }
}


这样的话只要你的Controller扩展了CustomMultiActionController ,在进行数据绑定时就会把提交的数据中的html标签去除,如果某些属性需要有html标签的话就通过request.getParameter来获取没转换的数据。

这只是一个简单的例子,你还可以扩展其它的属性编辑器,比如时间格式的,在提交时统一把date转换为某种格式保存。

分享到:
评论

相关推荐

    spring MVC数据绑定大全

    spring MVC数据绑定 含例子 转载自疯芒毕露的专栏 刚开始用spring mvc 做web开发时 经常会不知道如何合适绑定页面数据 用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便 本人最开始也是这么认为 经过一段...

    Spring+MVC数据绑定大全+

    Spring+MVC数据绑定大全+

    Spring MVC数据绑定大全.rar

    Spring MVC数据绑定大全.rar

    spring mvc 参数绑定漏洞

    NULL 博文链接:https://yfm049.iteye.com/blog/860494

    精通Spring MVC 4

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。...通过阅读本书,读者将深度把握Spring MVC的各项特性及实用技巧。

    Spring MVC数据绑定概述及原理详解

    主要介绍了Spring MVC数据绑定概述及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    SpringMVCDemo:Spring MVC 框架知识案例

    1.创建第一个 Spring MVC 程序案例 ...11.Spring MVC 数据绑定案例 12.Spring MVC 实现 JSON 数据返回案例 13.Spring MVC 文件的上传与下载案例 14.Spring MVC 拦截器案例 15.Spring MVC 异常处理案例

    第12章Spring MVC参数绑定的验证

    第12章Spring MVC参数绑定的验证 简单数据类型绑定 默认数据类型绑定 POJO类型 复杂数据类型绑定(数组、集合)

    [免费]Spring MVC学习指南(高清)

    全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...

    大优惠 Spring MVC学习指南(第2版)2017.pdf

    全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...

    spring mvc标签使用指南

    13.9. 使用Spring的表单标签库 1 13.9.1. 配置 1 13.9.2. form标签 1 13.9.3. input标签 3 13.9.4. checkbox标签 3 13.9.5. checkboxes标签 6 13.9.6. radiobutton标签 6 13.9.7. radiobuttons标签 7 13.9.8. ...

    Spring MVC 入门实例

    在 Spring MVC 中, jsp 文件中尽量不要有 Java 代码, 只有 HTML 代码和"迭代(forEach)"与"判断(if)"两个jstl标签. jsp 文件只作为渲染(或称为视图 View)模板使用. 好了, 我们开始吧. 首先我们需要一个放在 WEB-INF...

    27 Spring MVC数据绑定InitBinder揭秘慕课专栏1

    背景在使用 SpingMVC 框架的项目中,经常会遇到页面某些数据要转换成类型是 Date、Integer、Double 等的数据绑定到控制器的实体。Sprin

    精通Spring MVC 4 中文

    精通Spring MVC 4 中文

    spring mvc 官方文档

    本文详细介绍spring MVC的原理和开发心得体会。

    Spring-MVC处理XSS、SQL注入攻击的方法总结

    Spring-MVC处理XSS、SQL注入攻击的方法总结

    Spring MVC 基于注解实例

    Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于...

    spring mvc源代码

    spring mvc4.1.4 源代码 spring mvc4.1.4 源代码spring mvc4.1.4 源代码spring mvc4.1.4 源代码spring mvc4.1.4 源代码

Global site tag (gtag.js) - Google Analytics