Node Mysql 防止 sql 注入方法

2021-09-02 19:14:35 字數 1771 閱讀 1758

引數編碼方法有如下三個:

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.盲注是不能通過直接顯示的途徑來獲取資料庫資料的方法。在盲注中,攻擊者根據其返回頁面的不同來判斷資訊 可能是頁面內容的不同,也可以是響...