网络安全之基于过滤器防御xss脚本攻击

上一篇文章中讲到了如何防御xss脚本攻击的方法。这一集详细介绍具体方法:

只需要写过滤器,去拦截每个请求,对每个不为空的参数,实现一个特殊字符的过滤。

和拦截器的区别:

aop也是可以的,它是springboot自带的,但是过滤器比较推荐。因为拦截器属于serverlet中没有的概念。

过滤器(Filter)是Servlet的加强版,通过实现javax.servlet.Filter接口来增强功能。它主要用于对用户请求进行预处理,例如检查用户授权、记录日志信息、解码和过滤字符编码等。过滤器在Web应用启动时初始化一次,并在整个生命周期内处理请求,直到应用停止或重新部署时销毁。

使用Filter的流程包括:1)对用户请求进行预处理;2)将请求交给Servlet处理并生成响应;3)对服务器响应进行后处理。为创建Filter,需要实现javax.servlet.Filter接口,该接口定义了三个方法:init()用于Filter的初始化;doFilter()用于实现过滤功能,即对每个请求增加额外的处理;destroy()用于回收资源。

doFilter()方法用于实现用户请求的预处理和服务器响应的后处理。预处理和后处理的分界线为是否调用了chain.doFilter()方法,调用之前是预处理,调用之后是后处理。

拦截器属于SpringMvc提供拦截请求框架,但是最上一层,是过滤器先执行,因为先找到过滤器,然后再去走到拦截器。

过滤器---------拦截器

方法:

自己封装一些aop,通过aop去拦截方法,在方法前后做处理。aop的底层就是对一些过滤进行封装。

 直接用StringEscapeUtils方法里面底层的源码,都已经帮我们封装好了,拿到一个newValue,这个代码的方法会对一些特殊字符进行转译。

然后在filter类中,我们过滤后要进行房型,传递request对象和response类,以下

是进行放行的代码: 

拦截器(Interceptor)在AOP编程中用于在方法或字段被访问前进行拦截,可在其前后执行一些操作。拦截器常用于实现诸如权限管理和日志服务等共用行为。在Spring MVC中,要使用拦截器需要实现org.springframework.web.servlet.HandlerInterceptor接口,该接口定义了三个方法:

  1. preHandle():在请求处理之前调用,链式调用多个拦截器。根据声明顺序依次执行,可以进行前置处理和判断是否继续执行。返回false时,请求结束;返回true时,继续调用下一个拦截器的preHandle方法,最终执行Controller方法。
  2. postHandle():在Controller方法调用后,视图渲染前调用。可以对处理后的ModelAndView进行操作。执行顺序与preHandle相反,先声明的Interceptor的postHandle方法后执行。
  3. afterCompletion():在整个请求结束后调用,即视图渲染后。主要用于资源清理。

两者执行顺序如下图:

拦截器(Interceptor)和过滤器(Filter)的本质区别在于:拦截器基于Java的反射机制,而过滤器基于函数回调。拦截器功能相对更强大且灵活,可以在请求前后执行,而过滤器主要用于处理URL地址编码、过滤无用参数和安全校验等较泛的任务。在需要处理细节方面,建议使用拦截器。根据不同情况,选择适合的技术。但是对于这里的xss脚本攻击进行防御,那么应该使用过滤器,这是比较推荐的,物尽其用。

过滤器的具体实现:

springboot中的@WebFilter再注入@Component容器中,再在主函数中取实现Filter接口,使用"在IntelliJ IDEA中,快速实际接口方法可以使用快捷键Ctrl + I。按下快速快捷键后,会弹出“实现方法”对话框,其中列出了当前类所实际的接口方法列表。" 这个方法快速生成methods,拦截所有请求,并过滤静态资源,比如带大于号小于号全部进行转译。

这里我们还需要定义一个HttpServletRequestWrapper的类,这个类的核心用来,一旦调用参数,就会进行类里的回调。

过滤器的底层:

采用责任链的模式,最后才是自己定义的过滤器,拿到username后,把特殊字符进行转译,然后在页面展示脚本,相当于文字,不再是执行脚本。

 

文中引用到了一篇文章:拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别_过滤器和拦截器的执行顺序_止步前行的博客-CSDN博客

(关于拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别)

好了,今天分享到这里。

同步关注github:uqcharles.Github.io

喜欢的点赞关注,转载请说明来源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值