2017-09-26 55 views

回答

1

node-mysql這是一個很好的圖書館,汽車逃生查詢值檢查出來https://github.com/mysqljs/mysql#escaping-query-values

+0

我使用的MySQL:2.14.1,我如何使用我應該只是傳遞mysql.escape我的值()? –

+0

是,當你傳遞一個對象到.escape()或.query(),.escapeId()被用來避免在對象鍵SQL注入。 – AZinkey

0

對於要擺脫查詢值我的理解,當你執行mysql操作我不知道你正在使用的mysql驅動程序,但我會建議一些與mysql的node.js驅動程序解決方案。

在此的mysql的NodeJS驅動內置機制轉義查詢values.In爲了避免SQL注入攻擊,你應該總是使用它的SQL查詢中之前流出的任何用戶提供的數據。你可以這樣做使用mysql.escape()connection.escape()pool.escape()方法:

注意轉義值的這些方法時 NO_BACKSLASH_ESCAPES SQL模式被禁止(這是默認狀態 爲MySQL服務器)纔有效。

var userId = 'some user provided value'; 
var sql = 'SELECT * FROM users WHERE id = ' + connection.escape(userId); 
connection.query(sql, function (error, results, fields) { 
    if (error) throw error; 
    // ... 
}); 

或者,你可以使用嗎?字符佔位符值,你想逃脫這樣的:

connection.query('SELECT * FROM users WHERE id = ?', [userId], function (error, results, fields) { 
    if (error) throw error; 
    // ... 
}); 

多個佔位符映射到值相同的順序通過。例如,在下面的查詢FOO等於,bar等於B,baz等於c和ID將userId

connection.query('UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?', ['a', 'b', 'c', userId], function (error, results, fields) { 
    if (error) throw error; 
    // ... 
}); 

這類似於在MySQL準備好的語句,但它真的只是使用相同的connection.escape()方法internal.I希望這會幫助你。