疫情大数据平台是一个公益的项目,但很可能被网络上大量的扫描器扫描,并有可能收到脚本的攻击,而进行防御就是很重要的,可以有效的避免我们被攻击。
本篇主要讲述防止xss攻击部分

定义:

​ XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。

原理:

​ HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,与之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

1、Springboot XSS过滤插件(mica-xss)

mica-xss组件说明:

1、对表单绑定的字符串类型进行 xss 处理。

2、对 json 字符串数据进行 xss 处理。

3、提供路由和控制器方法级别的放行规则。

配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pcTCrAlU-1653486656214)(9、springboot-防止xss攻击.assets/1234sad.png)]

引入即可

<dependency><groupId>net.dreamlu</groupId><artifactId>mica-xss</artifactId><version>2.0.9-GA</version></dependency>
<dependency><groupId>net.dreamlu</groupId><artifactId>mica-core</artifactId><version>2.1.0-GA</version>
</dependency>

这样就可以了,但本篇主要讲述手动构造的方式进行

过程主要是三步:包装request->创建过滤器->添加过滤器

首先创建包装request的类,主要是对请求头和请求体中的有效字符进行逐个过滤,将有攻击性的字符进行逐一替换,让其在不失去原有功能的情况下,失去攻击性,是通过装饰模式补充父类HttpServletRequestWrapper让xss的更新直接调配可以加入

public class Xss extends HttpServletRequestWrapper {public XssHttpServletRequestWrapper(HttpServletRequest request) {super(request);}@Overridepublic String[] getParameterValues(String parameter) {String[] values = super.getParameterValues(parameter);if (values==null)  {return null;}int count = values.length;String[] encodedValues = new String[count];for (int i = 0; i < count; i++) {encodedValues[i] = cleanXSS(values[i]);}return encodedValues;}@Overridepublic String getParameter(String parameter) {String value = super.getParameter(parameter);if (value != null) {return cleanXSS(value);}return null;}@Overridepublic String getHeader(String name) {String value = super.getHeader(name);if (value == null)return null;return cleanXSS(value);}private static String cleanXSS(String value) {value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");value = value.replaceAll("%3C", "&lt;").replaceAll("%3E", "&gt;");value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");value = value.replaceAll("%28", "(").replaceAll("%29", ")");value = value.replaceAll("'", "'");value = value.replaceAll("eval\\((.*)\\)", "");value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");value = value.replaceAll("script", "");return value;}@Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream bais = new ByteArrayInputStream(inputHandlers(super.getInputStream ()).getBytes ());return new ServletInputStream() {@Overridepublic int read() throws IOException {return bais.read();}@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) { }};}public   String inputHandlers(ServletInputStream servletInputStream){StringBuilder sb = new StringBuilder();BufferedReader reader = null;try {reader = new BufferedReader(new InputStreamReader(servletInputStream, Charset.forName("UTF-8")));String line = "";while ((line = reader.readLine()) != null) {sb.append(line);}} catch (IOException e) {e.printStackTrace();} finally {if (servletInputStream != null) {try {servletInputStream.close();} catch (IOException e) {e.printStackTrace();}}if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}return  cleanXSS(sb.toString ());}}

其次是创建过滤器调用上面的过滤器的创建调用和销毁
filterChain.doFilter在通过创建调用过滤器的同时进行过滤器的传递

@WebFilter(filterName="myXssFilter", urlPatterns="/*")
public class MyXss implements Filter {FilterConfig filterConfig = null;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器初始化");this.filterConfig = filterConfig;}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("执行过滤操作");filterChain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest)servletRequest), servletResponse);}@Overridepublic void destroy() {System.out.println("过滤器销毁");this.filterConfig = null;}}

最后是添加过滤器,在程序入口添加注解 @ServletComponentScan即可

6、springboot-防止xxs攻击相关推荐

  1. springboot防止XSS攻击和sql注入

    文章目录 1. XSS跨站脚本攻击 ①:XSS漏洞介绍 ②:XSS漏洞分类 ③:防护建议 2. SQL注入攻击 ①:SQL注入漏洞介绍 ②:防护建议 3. SpringBoot中如何防止XSS攻击和s ...

  2. CSRF攻击与XXS攻击

    一.CSRF 概念 CSRF(Cross-site request forgery)--跨站请求伪造.也被称为"One Click Attack"或者"Session R ...

  3. SpringBoot防XSS攻击

    1 . pom中增加依赖 <!-- xss过滤组件 --> <dependency><groupId>org.jsoup</groupId><ar ...

  4. SpringBoot 防止XSS攻击和SQL攻击拦截器(Filter)

    什么是SQL攻击.什么是XSS攻击 SQL 攻击:把SQL命令插入到Web表单并提交,欺骗服务器执行恶意的SQL命令. XSS 攻击:向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏 ...

  5. SpringBoot2.0系列教程(十三)Springboot防止XSS攻击

    Hello大家好,本章我们添加防止XSS攻击功能 .有问题可以加我VX:Mrchuchen. 一:什么是XSS XSS攻击全称跨站脚本攻击,是一种在web应用中的计算机安全漏洞,它允许恶意web用户将 ...

  6. SpringBoot 抵御XSS攻击

    抵御XSS攻击 1.XSS攻击的危害 2.抵御XSS的实现 1.导入Hutool的依赖库 2.定义请求包装类 3.测试 1.XSS攻击的危害 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙 ...

  7. springboot-过滤器与xxs攻击防御

    过滤器解决XXS(脚本注入) 1.实现Filter接口 public class XssFilter implements Filter {@Overridepublic void doFilter( ...

  8. web安全---xxs攻击

    xss攻击是一种跨站脚本攻击,黑客通过在页面中写入恶意脚本,实现脚本攻击. xss攻击的分类 1.反射型跨站攻击 个人理解:就是你在搜索框中写入<script>alent("xs ...

  9. 一次真实的XXS攻击

    这是一个真实的事,一家比较大的公司举办的一个全国性的投票,然而,页面确实写得很烂,做假太容易. 首先,找到投票按钮的源代码: 这个"tp"类就是投票事件的定位关键字. 然后,打开s ...

最新文章

  1. 查看mysql日志文件大小和数据库大小
  2. php 上传pdf文件损坏,php – 强制下载PDF文件,损坏文件
  3. leetcode 189. 旋转数组
  4. 不容按钮、下拉框 执行同一个函数或者同一种函数的用法
  5. JavaEE各种Javadoc的下载
  6. Git命令之查看及设置用户名邮箱
  7. axure 发布 主页_【最新实习发布!】滴滴后台/数据产品经理实习生
  8. 在MacOSX的Vmare Fusion中添加虚拟软驱和制作虚拟软盘
  9. Round 2—算法的复杂度
  10. centos 6.5 thinkpad trackpoint 中间键 滚动设置
  11. 给出直角三角形斜边,求有多少三角形符合要求
  12. 如何学习有限元分析 有限元分析学习心得
  13. Fluent验证案例05:管道中的泊肃叶流动
  14. quartus ii 增量编译
  15. PC机插入麦克风后没有说话没有声音
  16. 502 bad gateway是什么意思?502 bad gateway怎么解决!
  17. AI是一场革命,不要笑,我是认真的。
  18. 小米7.0系统设备一键激活Xposed框架的教程
  19. 学计算机但是对电脑不熟,关于计算机学习心得感悟
  20. 【谷歌插件】Fatkun图片批量下载

热门文章

  1. GBase 8c 权限说明
  2. office2021官方正版镜像
  3. 中国各省份名字的由来
  4. Linux中防火墙firewalld
  5. Android Studio-Didn't find class XXX on path: DexPathList [zip file /data/xxx/base.apk]解决方法
  6. TCP/IP网络编程_第6章基于UDP的服务器端/客户端
  7. 丢手帕问题 java_java入门小程序—17人游戏(丢手绢问题) | 学步园
  8. python自动填写腾讯文档_腾讯文档自动填充工具(工具),填写
  9. 【VBA编程】Sub过程
  10. 习题4-5 换硬币 (20分) 将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?