XSS攻击防护

项目的xss攻击拦截

项目要上线的话,需要检查下有没有xss攻击的风险。

什么是xss,简单来说,就是前端输入类型然后存储到后端,前端下次获取这个数据的时候,因为直接显示到前端的话,因为被认为是js脚本,直接执行了。这个风险在于如果这个显示是公共的资源的话,可能让用户执行一些恶意的js,比如将密码通过js发送到固定接口。

那怎么拦截呢。

前端可能处理的话,就是利用显示的时候,敏感字符转义后显示。

我们后端的处理的,就是拦截参数,要么是在前端输入存储到数据库之前的时候,转义敏感字符。

要么是显示到前端前,反序列化前转义敏感字符。

针对前端输入存储到数据库前,如果我们代码手动编码的话,比较麻烦。有没有办法可以直接指定参数xss过滤?

这个我们需要了解下springmvc的参数接收原理。

https://blog.csdn.net/weixin_34216036/article/details/91696361

自定义参数解析器

https://www.jianshu.com/p/6eba4e2c6cab

https://blog.csdn.net/bestxiaok/article/details/88807212

https://www.cnblogs.com/java-zhao/p/9119258.html

本来想重写参数解析器的,但是感觉跟原有项目不兼容,因为如果重写解析器的话,每个接口都要加上自定义的参数解析器了。

换个思路,我们后端项目基本接受参数也就三种方式。

1.get直接获取参数

2.post通过表单方式,或者json格式获取对象。

有没有办法可以在这里做手脚。

https://www.freesion.com/article/7503775029/

基本也有这么几个思路。网上思路总结为两种,

一种是重写wrapper,这个针对表单能有效拦截。

Content-Type传参方式接收方式
application/x-www-form-urlencoded表单key-valueHttpServletRequest Parameters 获取 multipart/form-data
multipart/form-data表单key-valueHttpServletRequest Parameters 获取

但是这种拦截对于post的json没效果

Content-Type传参方式接收方式
application/jsonjson格式文本HttpServletRequest IO流获取

主要原因还是在于获取参数方式不同。

这个网上给出的方案是继承 WebMvcConfigurationSupport 类后,重写MappingJackson2HttpMessageConverter,遍历转化器列表,找到MappingJackson2HttpMessageConverter,可以根据类型来判断哪个是 MappingJackson2HttpMessageConverter ,然后移除(注意遍历移除一定要用迭代器),把我们自定义的转化器添加进去。替换默认的MappingJackson2HttpMessageConverter,过滤(json请求参数)xss

使用此方法之后,在控制层跳转页面会出现静态资源无法访问的情况(可以自己重写addResourceHandlers()这个方法来访问资源文件)。
因为继承WebMvcConfigurationSupport 会使原本的 springboot 的自动配置类失效,所以框架帮我们自动配置的就没了

我遇到的是两个问题,一个是静态资源访问问题,一个是json配置的日期转化异常问题。

还有一种是实现 WEBMVCCONFIGURER、INITIALIZINGBEAN 类 ,在注入objectMapper的时候,注入自定义的配置。

https://www.freesion.com/article/7503775029/

get请求的话,非要拦截的话,建议自定义PropertyEditor

https://blog.csdn.net/Newerwu/article/details/113374479

问题

这里针对get和post请求,都有自定义的xss过滤方法,但是有这么一个问题,这个是全局的处理器。也就是说,只要加了,后续的get,post请求的xss过滤就会生效,然后那么对应的带有敏感字符的都会被转义。但是如果说我部分接口不想转义呢?

没办法,我真的没办法。

本来的话,思路是,能不能在对应的地方,加个注解,说这个地方不用转义。

我们可以看出,之前的处理方式都是通过重写ObjectMapper的对应的反序列化器,这样的话,springmvc的反序列化就能针对特殊字符转义了。

https://blog.csdn.net/pistolove/article/details/50868105

我本来以为objectmapper有对应的前置处理器,但是没有,没有,没有,我找了一晚上,没找到。有大佬知道,jackson属性注入前有办法,或者有前置处理器吗

JacksonAnnotationIntrospector,JsonFilter拦截器和过滤器没办法满足我的要求。这咋整。

https://www.iflym.com/index.php/code/201906190001.html

https://www.cnblogs.com/rollenholt/p/5406573.html

那么我就只能退而求其次。能不能在接受参数后,处理xss?

然后百度一下,有没有办法requestbody参数后置处理。

然后发现了这个

https://blog.csdn.net/xingbaozhen1210/article/details/98189562

那么我就只能退而求其次,写个自己的注解,在requestbody前加个自己的注解,决定是不是xss过滤了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值