网络安全漏洞防护知识一:input输入防止xss攻击的防御措施

网络安全漏洞防护知识一:input输入防止xss攻击的防御措施

input输入预防xss网络攻击的防御措施

1.首先项目安装 dompurify, 终端安装命令:npm i dompurify


2.在utils文件夹下面创建directives文件夹,然后在该文件夹下面创建inputFilter.js 具体内容如下:

import DOMPurify from 'dompurify';

/**

*  实现功能

*  1、默认情况下只禁止空格输入

*  2、intFilter 限制只能输入整数

*  3、priceFilter 限制只能输入整数和小数(价格类)

*  4、phoneFilter 限制只能输入手机号

*  5、specialFilter 限制最大值和最小值(抛出错误给回调函数)

*  6、domPurify 限制非法字符的输入

*/

const addListener = function(el, type, fn) {

  el.addEventListener(type, fn, false)

}

const domPurify = function(el){

addListener(el, 'keyup', () => {

  el.value =  DOMPurify.sanitize(el.value);

el.dispatchEvent(new Event("input"));

})

}

const spaceFilter = function(el) {

  addListener(el, 'keyup', () => {

    el.value = el.value.replace(/\s+/, '');

el.dispatchEvent(new Event("input"));

  })

}

const intFilter = function(el) {

  addListener(el, 'keyup', () => {

    el.value = el.value.replace(/\D/g, '');

el.dispatchEvent(new Event("input"));

  })

}

const priceFilter = function(el) {

  addListener(el, 'keyup', () => {

    el.value = el.value.replace(/[^\d.]*/g, '')

    if (isNaN(el.value)) {

      el.value = ''

    }

el.dispatchEvent(new Event("input"));

  })

}

const specialFilter = function(el) {

  addListener(el, 'keyup', () => {

    el.value = el.value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g, '');

el.dispatchEvent(new Event("input"));

  })

}

const phoneFilter = function(el) {

  addListener(el, 'blur', () => {

    if (!el.value) {

      return

    }

    const phoneReg = new RegExp('^(13|14|15|16|17|18|19)[0-9]{9}$')

    if (!phoneReg.test(el.value)) {

      alert('手机号输入错误')

      el.value = ''

    }

  })

}

const urlFilter = function(el) {

  addListener(el, 'blur', () => {

    if (!el.value) {

      return

    }

    const urlReg = /(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/

    if (!urlReg.test(el.value)) {

      alert('url输入错误')

      el.value = ''

    }

  })

}

export default {

  bind(el, binding) {

    if (el.tagName.toLowerCase() !== 'input') {

      el = el.getElementsByTagName('input')[0]

    }

    spaceFilter(el)

    switch (binding.arg) {

      case 'int':

        intFilter(el)

        break

      case 'price':

        priceFilter(el)

        break

      case 'special':

        specialFilter(el)

        break

      case 'phone':

        phoneFilter(el)

        break

      case 'url':

        urlFilter(el)

        break

  case 'dom':

  domPurify(el)

  break

      default:

        break

    }

  }

}



然后创建index.js文件 具体代码如下:

import inputFilter from './inputFilter'

const install = function(Vue) {

  Vue.directive('inputFilter', inputFilter)

}

if (window.Vue) {

  window.inputFilter = inputFilter

  Vue.use(install)

}

inputFilter.install = install

export default inputFilter



最后在main.js中引入js

import DomPurify from './utils/directives/index.js'

Vue.use(DomPurify);



在vue项目中使用如下v-input-filter:dom

                <el-input

                    type="password"

                    v-model="bsform.password"

                    placeholder="请输入密码"

                    autocomplete="off"

                   v-input-filter:dom

                    :show-password="true"

                    class="login-input"

                  ></el-input>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容