模糊查询防止sql注入后出错!!!!!!

来源:9-1 开始和sql注入

浩浩吃

2019-04-18

模糊查询在使用escape后出现无可拯救的错误,在看到你回答别人问题列举的解决办法后我进行了尝试仍然无法解决问题,具体代码如下:

const { exec, escape } = require('../db/mysql.js')
const xss = require('xss')

const getList = (author,keyword) => {
    //先返回假数据(格式是正确的)
    author = escape(author)
    keyword = escape('%'+keyword+'%')
    let sql = `select * from blogs where 1=1 ` //1=1是为了确保在author,id没有值的情况下不会报错
    if(author{
        sql += `and author=${author} `
    }
    if(keyword) {
        sql += `and title like ${keyword} `
    }
    
    sql += `order by createtime desc;`
    //返回promise
    return exec(sql)
}
写回答

3回答

双越

2019-04-18

你写了这么多内容,却忽略了一个重要的信息:无法解决问题,那到底现象是什么,或者报错信息是什么,这个得写出来。

0
0

浩浩吃

提问者

2019-04-18

//img.mukewang.com/szimg/5cb842780001ed0d04840186.jpg修改好了 直接把if判断条件改为这个就可以了

0
0

浩浩吃

提问者

2019-04-18

然后我查到只要把if(author)那个判断注释掉,老师你给的这个答案又可以查询到数据,那么我发现问题可能在于这个判断,但是我尝试了一下if(!author){}却还是会执行sql += `and author=${author} `,这是为什么??????

const { exec, escape } = require('../db/mysql.js')

const xss = require('xss')


const getList = (author,keyword) => {

//先返回假数据(格式是正确的)

author = escape(author)

keyword = escape('%'+keyword+'%')

let sql = `select * from blogs where 1=1 ` //1=1是为了确保在author,id没有值的情况下不会报错

// if(!author){

//     sql += `and author=${author} `

// }

if(keyword) {

sql += `and title like ${keyword} `

}

sql += `order by createtime desc;`

//返回promise

return exec(sql)

}


0
4
浩浩吃
回复
双越
你好,if(author!=='')这样还是判断为真,所以可能escape(author)的值不是'',但是将authorconsole.log()输出后却看起来像''
2019-04-18
共4条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4074 学习 · 2013 问题

查看课程