直接拼寫sql進(jìn)行數(shù)據(jù)庫的操作時(shí)排监,很容易被人在動態(tài)參數(shù)中加入特殊字符產(chǎn)生sql注入狰右,威脅數(shù)據(jù)庫的安全。
'use strict';
const mysql = require('mysql');
let param = 'ns';
let pool = mysql.createPool({
user: 'root',
password: 'root',
database: 'nlp_dict'
});
pool.getConnection(function (err, conn) {
let sql = 'select * from tb_nature where nature = "' + param + '" and del_status=1';
conn.query(sql, function (err, result) {
console.log(result);
})
});
這時(shí)正常情況下能查詢到一條數(shù)據(jù)舆床,如果將param修改成
let param = 'ns"-- ';
sql語句就會變成
select * from tb_nature where nature = "ns"-- " and del_status=1
后面的del_status就會被參數(shù)中的 -- 注釋掉棋蚌,失去作用,能查詢到多條數(shù)據(jù)挨队。
如果對param使用escape包裝下谷暮,就能將參數(shù)中的特殊字符進(jìn)行轉(zhuǎn)義,防止sql的注入盛垦。
let sql = 'select * from tb_nature where nature = ' + mysql.escape(param) + ' and del_status=1';