打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
XSS安全漏洞的几种修复方式

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,跨站脚本攻击指的是恶意攻击者往Web页面里插入恶意的html,javaScript代码,当用户浏览该页之时,嵌入其中Web里面的html,javaScript代码会被执行,从而达到恶意的特殊目的,如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。不过,因为是一种被动的攻击手法,没有相应的软件来完成自动化攻击,对website有http-only、crossdomian.xml(接下来会介绍这两种方法)没有用,有一定几率不成功,而且还耗时间,所以xss现在是一门热门但不太受重视的Web攻击手法。12

XSS攻击解决办法

一、SpringMVC架构下@InitBinder方法 

Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型。若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数,服务端通过Request的getParameter方法取到的参数都是字符串形式,WebDataBinder的作用就是把字符串形式的参数转换成服务端真正需要的类型。 

每次请求到来后的参数解析都会利用WebDataBinderFactory创建一个binder对象,然后从这个binder中取得最终解析好的参数对象。WebDataBinderFactory是在InvocableHandlerMethod中定义的,即不同的Controller方法有着不同的WebDataBinderFactory。 

@InitBinder用于在@Controller中标注于方法,表示为当前控制器注册一个属性编辑器或者其他,只对当前的Controller有效,所以要用@InitBinder实现过滤输入,转义输出,就必须在每个需要的Controller中使用@InitBinder,我的方法就是创建一个BaseController,每个需要实现此业务的都去继承它。import org.springframework.stereotype.Controller; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; @Controller public class BaseController {     @InitBinder     public void webInitBinder(WebDataBinder binder){         binder.registerCustomEditor(String.class, new StringEditor());     } } public class StringEditor extends PropertyEditorSupport {     @Override     public void setAsText(String text) throws IllegalArgumentException {         if (StringUtils.isBlank(text)) {             return;         }         try {             //Spring自带html标签转义与反转义             super.setValue(HtmlUtils.htmlEscape(text));         } catch (Exception e) {             throw new IllegalArgumentException(e);         }     } }123456789101112131415161718192021222324252627

二、WebBindingInitializer 

WebBindingInitializer:实现WebBindingInitializer,重写initBinder注册的属性编辑器是全局的属性编辑器,对所有的Controller都有效public class WebBinderInitializerUtils implements WebBindingInitializer{     @Override     public void initBinder(WebDataBinder binder, WebRequest request) {         binder.registerCustomEditor(String.class,new StringEditor());     } } public class StringEditor extends PropertyEditorSupport {     @Override     public void setAsText(String text) throws IllegalArgumentException {         if (StringUtils.isBlank(text)) {             return;         }         try {             //Spring自带html标签转义与反转义             super.setValue(HtmlUtils.htmlEscape(text));         } catch (Exception e) {             throw new IllegalArgumentException(e);         }     } }                                              

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
spring3,controller类中接收前台传来的对象中空整型或日期的处理
Spring MVC 学习笔记 十一 data binding
springMVC传对象参数
第四章 Controller接口控制器详解(6)——跟着开涛学SpringMVC
SpringMVC源码总结(十)自定义HandlerMethodArgumentResolver
Spring mvc注解说明
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服