king
2020-04-17 77ec79eb5e483a59157dff9b4fd75159e2fa132e
src/utils/utils.js
@@ -51,6 +51,43 @@
  }
  /**
   * @description sql语法验证
   * @return {String}  sql    sql语句
   * @return {String}  type   验证类型
   */
  static verifySql (sql, type) {
    if (!sql) return ''
    let chars = [
      {key: 'create', reg: '(^|\\s)create\\s'},
      {key: 'insert', reg: '(^|\\s)insert\\s'},
      {key: 'delete', reg: '(^|\\s)delete\\s'},
      {key: 'update', reg: '(^|\\s)update\\s'},
      {key: 'set', reg: '(^|\\s)set\\s'},
      {key: 'drop', reg: '(^|\\s)drop\\s'},
      {key: 'alter', reg: '(^|\\s)alter\\s'},
      {key: 'truncate', reg: '(^|\\s)truncate\\s'},
      {key: 'if', reg: '(^|\\s)if\\s'},
      {key: 'exec', reg: 'exec'},
      {key: 'OBJECT', reg: 'OBJECT'},
      {key: 'sys.', reg: 'sys.'},
      {key: 'kill', reg: 'kill'},
    ]
    if (type === 'customscript') {
      chars = chars.map(char => !['insert', 'delete', 'update', 'set', 'if', 'exec'].includes(char.key))
    }
    let error = ''
    chars.forEach(char => {
      if (!error && new RegExp(char.reg, 'ig').test(sql)) {
        error = char.key
      }
    })
    return error
  }
  /**
   * @description sql加密
   * @return {String}  value
   */
@@ -158,6 +195,7 @@
    }]
    if (!isUnFormat) { // 加密
      value = value.replace(/\n/ig, ' \n ')
      // 替换关键字
      format.forEach(item => {
        let reg = new RegExp('(^|\\s)' + item.key + '(\\s|$)', 'ig')
@@ -166,7 +204,7 @@
  
      // 1、替换%符(数据库中解析后sql报错)
      value = value.replace(/%/ig, ' mpercent ')
      // 1、encode编码(中文字符超出base64加密范围),2、base64加密
      value = window.btoa(window.encodeURIComponent(value))
  
@@ -181,13 +219,15 @@
        value = window.atob(value)
        value = value.replace(salt, '')
        value = window.decodeURIComponent(window.atob(value))
        value = value.replace(/\smpercent\s/g, '%')
        format.forEach(item => {
          let reg = new RegExp(item.value, 'g')
          value = value.replace(reg, ' ' + item.key + ' ')
        })
        value = value.replace(/\s\n\s/ig, '\n')
        value = value.replace(/(^\s+|\s+$)/ig, '')
      } catch {
        console.warn('UnFormat Failure')