一、场景描述
web安全防御一直都是大家关心的问题,而sql攻击也是常见的形式,如果服务接口中没有做防注入攻击的话,别人可能登录到公司的管理后台把里面的内容随便修改,后果将不堪设想。什么是SQL注入?
二、常见sql错误格式
`select count(1) count from dim_verify where is_delete = 0 AND phone_number like '%${18357559299}%'`
这种写法可能比较直观和方便,但很容易被攻击
三、解决办法——sql占位符
connectionJDBC.query(`update dim_verify set status=?,verify_time=?,gmt_modified = ? where id = ?`,[1,'2019-03-06','2019-03-06',25],function(error,result){})
sql语句中的4个问号会一一对应后边数组中每一项,要保证都能一一对应,不然会报错。
四、使用sql占位符在模糊查询like语句中遇见的坑
由于用node没写过几个接口,所以踩过的坑也没几个。
今天突然接到一个需求,让在原来的列表查询中加入两个字端混合的模糊查询,如果用那种错误的sql语句我会写(因为之前写过),但改成sql占位符后简单的语句没问题,但加上like就不知道怎么写了,百度了老半天也没找到合适的解决办法。尝试了很多方法都没成功
//正确方式
let code = query.code
connectionJDBC.query(`update dim_verify set status=?,verify_time=?,gmt_modified = ? where id = ? AND code LIKE ?`,[1,'2019-03-06','2019-03-06',25,`%${code}%`],function(error,result){})
//错误方式
let code = query.code
connectionJDBC.query(`update dim_verify set status=?,verify_time=?,gmt_modified = ? where id = ? AND code LIKE '%${?}%'`,[1,'2019-03-06','2019-03-06',25,code],function(error,result){})
网友评论