Vue中防止XSS脚本攻击

  • 2022-08-11
  • 浏览 (5011)

Vue中防止XSS脚本攻击

最近写了一个博客评论模块,因为引入了表情包,所以就将原来的v-text的形式,改成了v-html,也就是渲染html标签,但是这样不可不免的会带来问题,就是XSS跨站脚本攻击

XSS解决方案官网:点我传送

XSS脚本攻击

跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

例如我在评论框输入以下内容

<a onclick='let count=10;while(count>0){alert("xss攻击");count=count-1;}'>链接</a>

这个时候评论就会出现一个超链接

image-20200430090311752

只要我们点击这个链接后,就会出现一个alert弹框

image-20200430090351946

上面代码因为写的的是循环10次后,alert消失,但是如果是while(true),那么后果不堪设想,会进入无止无休的弹框

解决XSS脚本攻击

首先需要安装xss模块

npm install xss --save

然后在main.js中引入

import xss from 'xss'
// 定义全局XSS解决方法
Object.defineProperty(Vue.prototype, '$xss', {
  value: xss
})

然后针对需要渲染的页面,调用$xss()方法

<div class="rightCenter" v-html="$xss(item.content)"></div>

我们在点击刚刚的页面,发现已经不会有弹框了,但是有出来了新的问题,就是我引入的标签也被过滤了

image-20200430092519608

引入xss后

image-20200430092619240

这个时候,我们就需要自定义拦截规则了,我们在data中添加如下配置,下面是自定义白名单,也就是什么标签以及标签的属性能够正常使用,其它的都会被拦截

    data() {
      return {
        // xss白名单配置
        options : {
          whiteList: {
            a: ['href', 'title', 'target'],
            span: ['class']
          }
        }
      };
    },

然后在使用的时候,增加option配置

<div class="rightCenter" v-html="$xss(item.content, options)"></div>

这个时候,表情已经成功显示了,并且原来的脚本攻击也不生效,达到了我们的目的~

image-20200430092858561

你可能感兴趣的文章

Vue如何使用G2绘制图片

Docker Compose入门学习

DockerDesktop入门简介

Docker图形化工具Portainer介绍与安装

1.Docker

Docker操作系统之Alpine

如何将镜像推送到阿里云容器镜像服务

对象存储MinIO入门介绍

ElasticSearch安装与介绍

Beats入门简介

0  赞