老框架上 传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 )
让后端替换去吧。
把自己能做的,做到最好。
                    
                
                
            
        
浙公网安备 33010602011771号