老框架上 传sql语句查询数据。。 遇到客户机器,加了堡垒机 过滤sql。的测试过程,以及解决办法。

 

 前言: 框架上,已有接口,移动端传sql的 where语句。在服务端处理后 查询数据。老框架了,正常开发别这么干。

 

一次 开发好功能 给客户部署后。  局域网内部测试OK。外网测试 {error: 19, errorMessage: 'HTTP错误', originalData: undefined}

 

 

getuserInfo 是代理接口。 不用在意。

其他接口都OK访问的。 唯独这个appGetListsql 错误。为社么呢。开发时,测试时也OK 啊。  怀疑是服务器问题。并不是程序本身问题。 

下面开始测试过程:。

  定义一个ajax:

function Testajax(data){
    $.ajax({
        url: openinfo.root + 'work/appGetListsql',
        data: {
            psize:"15",
            sql:data
        },
        type: 'POST',
        dataType: 'json',
        headers:{
            appauthorized:'这里是标识字符串。mvc网站OnActionExecuting 中接收移动端传过来的headers 字段 当jwt用的。'
        },
        beforeSend: function () {

        },
        complete: function () {

        },
        success: function (ret) {
            console.log(ret)
        },
        error: function (xhr, msg, ex) {
            swal('提示', msg, 'info');
        }
    });

}

 

 

 开始测试:

  • 1:测试原sql

 

 

  • 2:测试长度问题:

 

 

 

 不是长度问题。

  • 3:测试

 CN_S_TAKEON_ID='8888' AND CN_N_PLAN_TYPE = 0

 

 

 测试结果:只能一个 “ = ” 号。

 

  • 4:测试 

CN_S_TAKEON_ID='8888' AND CN_N_TASK_TYPE IN ( 0,1,4,5,6 ) 

 

 

 

 测试结果。  in 后面 不能跟 (。

 

再测试 encodeURI   encodeURIComponent  escape  均失败。

根据此次请求sql的结果来看。

 总结:

    • : 只能一个 = 号。
    • :in 后面不能跟 (

 

开始改。 
 定义  equal  就是 =  space 就是 空格

equal   =
space   

 

后端  把equal 替换为=   space 替换为空格。

 

 替换后  sql就是 : CN_S_TAKEON_ID equal'8888' AND CN_N_PLAN_TYPE equal 0 AND CN_N_TASK_TYPE IN space ( 0,1,4,5,6 )

让后端替换去吧。   

 

把自己能做的,做到最好。 

 

posted @ 2022-03-31 14:59  纯萌小呆呆  阅读(93)  评论(0)    收藏  举报