引數編碼方法有如下三個:
mysql.escape(param)
connection.escape(param)
pool.escape(param)
例如:
var userid = 1, name = 'test';
var query = connection.query('select * from users where id = ' + connection.escape(userid) + ', name = ' + connection.escape(name), function(err, results) );
console.log(query.sql); // select * from users where id = 1, name = 'test'
escape()方法編碼規則如下:
可使用 ? 做為查詢引數佔位符。在使用查詢引數佔位符時,在其內部自動呼叫connection.escape()
方法對傳入引數進行編碼。
如:
var userid = 1, name = 'test';
var query = connection.query('select * from users where id = ?, name = ?', [userid, name], function(err, results) );
console.log(query.sql); // select * from users where id = 1, name = 'test'
上面程式還可以改寫成如下:
var post = ;
var query = connection.query('select * from users where ?', post, function(err, results) );
console.log(query.sql); // select * from users where id = 1, name = 'test'
如果你不信任使用者傳入的sql識別符號(資料庫、表、字元名),可以使用escapeid()
方法進行編碼。最常用於排序等。escapeid()有如下三個功能相似的方法:
mysql.escapeid(identifier)
connection.escapeid(identifier)
pool.escapeid(identifier)
例如:
var sorter = 'date';
var sql = 'select * from posts order by ' + connection.escapeid(sorter);
connection.query(sql, function(err, results) );
準備查詢,該函式會選擇合適的轉義方法轉義引數mysql.format()
用於準備查詢語句,該函式會自動的選擇合適的方法轉義引數。
例如:
var userid = 1;
var sql = "select * from ?? where ?? = ?";
var inserts = ['users', 'id', userid];
sql = mysql.format(sql, inserts); // select * from users where id = 1
node mysql中防止SQL注入的方法總結
sql注入簡介 sql注入是比較常見的網路攻擊方式之一,它不是利用作業系統的bug來實現攻擊,而是針對程式設計師程式設計時的疏忽,通過sql語句,實現無帳號登入,甚至篡改資料庫。node mysql中防止sql注入 為了防止sql注入,可以將sql中傳入引數進行編碼,而不是直接進行字串拼接。在nod...
mybatis以及預編譯如何防止SQL注入
sql注入是一種 注入技術,用於攻擊資料驅動的應用,惡意的sql語句被插入到執行的實體欄位中 例如,為了轉儲資料庫內容給攻擊者 摘自 sql injection wikipedia sql注入,大家都不陌生,是一種常見的攻擊方式。攻擊者在介面的表單資訊或url上輸入一些奇怪的sql片段 例如 or ...
sql盲注特點 SQL盲注
盲注原理 盲注的分類 盲注常用函式 一 sql盲注概述 1.如果資料庫執行返回結果時只反饋對錯不會返回資料庫中的資訊 此時可以採用邏輯判斷是否正確的盲注來獲取資訊。2.盲注是不能通過直接顯示的途徑來獲取資料庫資料的方法。在盲注中,攻擊者根據其返回頁面的不同來判斷資訊 可能是頁面內容的不同,也可以是響...