iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >如何使用springMVC通过Filter实现防止xss注入
  • 449
分享到

如何使用springMVC通过Filter实现防止xss注入

2023-06-20 14:06:11 449人浏览 八月长安
摘要

本篇内容介绍了“如何使用springMVC通过Filter实现防止xss注入”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springmvc

本篇内容介绍了“如何使用springMVC通过Filter实现防止xss注入”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

springmvc Filter防止xss注入

跨站脚本工具(cross 斯特scripting),为不和层叠样式表(cascading style sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。

恶意攻击者往WEB页面里插入恶意scriptScript代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

防止XSS攻击简单的预防就是对Request请求中的一些参数去掉一些比较敏感的脚本命令。

原本是打算通过springMVC的HandlerInterceptor机制来实现的,通过获取request然后对request中的参数进行修改,结果虽然值修改了,但在Controller中获取的数值还是没有修改的。没办法就是要Filter来完成。

简单来说就是创建一个新的HttpRequest类XsslhttpservletRequestWrapper,然后重写一些get方法(获取参数时对参数进行XSS判断预防)。

@WebFilter(filterName="xSSMyfilter",urlPatterns=" public static String replaceXSS(String value) {     if (value != null) {         try{          value = value.replace("+","%2B");   //'+' replace to '%2B'          value = URLDecoder.decode(value, "utf-8");         }catch(UnsupportedEncodingException e){         }catch(IllegalArgumentException e){     }            // Avoid null characters   value = value.replaceAll("\0", "");    // Avoid anything between script tags   Pattern scriptPattern = Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);   value = scriptPattern.matcher(value).replaceAll("");    // Avoid anything in a src='...' type of e&shy;xpression   scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);   value = scriptPattern.matcher(value).replaceAll("");    scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);   value = scriptPattern.matcher(value).replaceAll("");    // Remove any lonesome </script> tag   scriptPattern = Pattern.compile("</script>", Pattern.CASE_INSENSITIVE);   value = scriptPattern.matcher(value).replaceAll("");    // Remove any lonesome <script ...> tag   scriptPattern = Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);   value = scriptPattern.matcher(value).replaceAll("");    // Avoid eval(...) e&shy;xpressions   scriptPattern = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);   value = scriptPattern.matcher(value).replaceAll("");    // Avoid e&shy;xpression(...) e&shy;xpressions   scriptPattern = Pattern.compile("e&shy;xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);   value = scriptPattern.matcher(value).replaceAll("");    // Avoid javascript:... e&shy;xpressions   scriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);   value = scriptPattern.matcher(value).replaceAll("");   // Avoid alert:... e&shy;xpressions   scriptPattern = Pattern.compile("alert", Pattern.CASE_INSENSITIVE);   value = scriptPattern.matcher(value).replaceAll("");   // Avoid οnlοad= e&shy;xpressions   scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);   value = scriptPattern.matcher(value).replaceAll("");   scriptPattern = Pattern.compile("vbscript[\r\n| | ]*:[\r\n| | ]*", Pattern.CASE_INSENSITIVE);     value = scriptPattern.matcher(value).replaceAll("");  }              return filter(value); }      public static String filter(String value) {         if (value == null) {             return null;         }                 StringBuffer result = new StringBuffer(value.length());         for (int i=0; i<value.length(); ++i) {             switch (value.charAt(i)) {              case '<':                  result.append("<");                  break;              case '>':                   result.append(">");                  break;              case '"':                   result.append(""");                  break;              case '\'':                   result.append("'");                  break;              case '%':                   result.append("%");                  break;              case ';':                   result.append(";");                  break;           case '(':                   result.append("(");                  break;              case ')':                   result.append(")");                  break;              case '&':                   result.append("&");                  break;              case '+':                  result.append("+");                  break;              default:                  result.append(value.charAt(i));                  break;          }           }         return result.toString();     } }

SpringMVC 防止XSS 工具(常规方式)

要求:

xss过滤请求的参数:Content-Type为 JSON(application/json)

SpringMVC 对于application/json 转换处理说明:

spring mvc默认使用MappingJackson2HttpMessageConverter转换器,

而它是使用jackson来序列化对象的,如果我们能 将jackson的序列化和反序列化过程修改,加入过滤xss代码,并将其注册到MappingJackson2HttpMessageConverter中

具体实现功能代码:

import java.io.IOException;import org.apache.commons.text.StringEscapeUtils;import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.DeserializationContext;import com.fasterxml.jackson.databind.deser.std.StdDeserializer; public class XssDefaultJsonDeserializer extends StdDeserializer<String> {  public XssDefaultJsonDeserializer(){  this(null); }  public XssDefaultJsonDeserializer(Class<String> vc) {  super(vc); }  @Override public String deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException {  // TODO Auto-generated method stub  //return StringEscapeUtils.escapeEcmaScript(jsonParser.getText());  return StringEscapeUtils.unescapehtml4(jsonParser.getText()); } }

SpringMVC 配置对象:

@Configuration@EnableWebMvcpublic class SpingMVCConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {  super.configureMessageConverters(converters);  // TODO Auto-generated method stub  SimpleModule module = new SimpleModule();  // 反序列化  module.aDDDeserializer(String.class, new XssDefaultJsonDeserializer());  // 序列化  module.addSerializer(String.class, new XssDefaultJsonSerializer());  ObjectMapper mapper = Jackson2ObjectMapperBuilder.json().build();  // 注册自定义的序列化和反序列化器  mapper.reGISterModule(module);  MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(mapper);  converters.add(converter);          }}

“如何使用springMVC通过Filter实现防止xss注入”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何使用springMVC通过Filter实现防止xss注入

本文链接: https://www.lsjlt.com/news/297471.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用springMVC通过Filter实现防止xss注入
    springMVC Filter防止xss注入 跨站脚本工具(cross 斯特scripting),为不和层叠样式表(cascading style sheets,CSS)的缩写混淆...
    99+
    2024-04-02
  • 如何使用springMVC通过Filter实现防止xss注入
    本篇内容介绍了“如何使用springMVC通过Filter实现防止xss注入”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springMVC...
    99+
    2023-06-20
  • nginx如何防止xss和sql注入
    nginx防止xss和sql注入的方法:将以下nginx配置文件代码放入到对应站点的.conf 配置文件server里,重启nginx即可,代码如下:if($request_method !~* GET|POST){return444;}#...
    99+
    2024-04-02
  • 如何防止xss和sql注入攻击
    防止xss和sql注入攻击的通用方法:php防sql注入和xss攻击通用过滤如下:function string_remove_xss($html) {preg_match_all("/\...
    99+
    2024-04-02
  • 前端如何防止xss和sql注入
    前端防止xss和sql注入的方法:使用php语言进行预防xss和sql注入,代码如下:function string_remove_xss($html) {preg_match_all("/\...
    99+
    2024-04-02
  • SpringBoot如何防止XSS注入攻击详解
    什么是 XSS 攻击 在跨站脚本(XSS)攻击中,攻击者可以在受害者的浏览器中执行恶意脚本。这种攻击通常是通过在网页中插入恶意代码 (JavaScript) 来完成的。攻击者在使用...
    99+
    2024-04-02
  • 实例讲解MyBatis如何防止SQL注入
     SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见。究其原因不外乎:No patch for stupid。为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样...
    99+
    2024-04-02
  • 详解Springboot如何通过注解实现接口防刷
    目录前言1、实现防刷切面PreventAop.java1.1 定义注解Prevent1.2 实现防刷切面PreventAop2、使用防刷切面3、演示前言 本文介绍一种极简洁、灵活通用...
    99+
    2024-04-02
  • SpringMVC框架中如何使用Filter实现请求日志打印
    这篇文章主要为大家展示了“SpringMVC框架中如何使用Filter实现请求日志打印”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringMVC框架中如何使用Filter实现请求日志打印”...
    99+
    2023-06-25
  • JSP中如何实现防SQL注入
    JSP中实现防SQL注入的方法:1.采用PreparedStatement预编译语句集,它内置了处理SQL注入的能力,使用它的setXXX方法传值即可。2.使用正则表达式过滤传入的参数。JSP中实现防SQL注入的方法:采用PreparedS...
    99+
    2024-04-02
  • 如何实现sql防注入问题
    sql防注入的实现方法:设置目录权限,系统管理员应为信息系统的每个目录或文件设置相应权限,授予每个文件能正常运行的权限,比如静态页面文件所在的目录,应只授予“读取”权限,包含活动脚本的文件授予“纯脚本”权限就足够了。隐藏错误信息,把服务器设...
    99+
    2024-04-02
  • 详解Java如何实现防止恶意注册
    目录1、添加验证码2、IP 限制3、添加滑动验证4、添加邮箱验证5、添加黑名单恶意注册通常是指使用自动化脚本或者机器人在短时间内进行大量的注册行为,这种行为会对系统造成压力,甚至会导...
    99+
    2023-05-17
    Java实现防止恶意注册 Java防止恶意注册 Java 恶意注册
  • PHP中如何使用预处理语句防止SQL注入攻击?
    php 中使用预处理语句可以有效防御 sql 注入攻击。预处理语句通过允许在执行查询之前定义查询参数,从而阻止攻击者插入恶意字符串。它具有更高的安全性、更好的性能和易于使用的优点。 P...
    99+
    2024-05-06
    mysql 防止sql注入 php脚本
  • 如何实现防SQL注入的VBSrcipt代码
    小编给大家分享一下如何实现防SQL注入的VBSrcipt代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!<script language=&qu...
    99+
    2023-06-08
  • MyBatis-Plus如何通过注解使用TypeHandler
    目录通过注解使用TypeHandler官方示例Kotlin案例自定义TypeHandler使用通过注解使用TypeHandler 在使用MyBatis时,我们与数据表中字段映射的ja...
    99+
    2024-04-02
  • 使用Spring如何实现注入属性
    使用Spring如何实现注入属性?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在spring框架中,属性的注入我们有多种方式,我们可以通过构造方法注入,可以通过...
    99+
    2023-05-31
    spring 属性注入
  • Springboot中如何通过yml为实体类注入属性
    目录1.编写实体类2.编写yml文件3.测试4.结果 5.可以不用@ConfigurationProperties(prefix = “person&rdquo...
    99+
    2024-04-02
  • 使用SpringMVC如何实现整合mybatis
    这篇文章给大家介绍使用SpringMVC如何实现整合mybatis,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache softw...
    99+
    2023-05-31
    springmvc mybatis
  • Springboot详解如何实现SQL注入过滤器过程
    目录1.过滤器SqlInjectFilter2.请求装饰类CustomRequestWrapper3.过滤器注册4.测试辅助类4.1 结果对象ResultObj4.2 Restful...
    99+
    2024-04-02
  • Java中的线程如何实现通过关闭Socket终止
    这篇文章将为大家详细讲解有关Java中的线程如何实现通过关闭Socket终止,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体内容如下package Threads;import java....
    99+
    2023-05-31
    java socket 终止线程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作