node-mysql中避免SQL注入

访客6年前黑客文章1161

 补白: 本文针对mysqljs/mysql。


为了避免SQL注入,能够将SQL中传入参数进行编码,而不是直接进行字符串拼接。在node-mysql中,避免SQL注入的常用办法有以下四种:

办法一:运用escape()对传入参数进行编码:

参数编码办法有如下三个:

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()办法编码规矩如下:

Numbers不进行转化; Booleans转化为true/false; Date目标转化为’YYYY-mm-dd HH:ii:ss’字符串; Buffers转化为hex字符串,如X’0fa5’; Strings进行安全转义; Arrays转化为列表,如[‘a’, ‘b’]会转化为’a’, ‘b’; 多维数组转化为组列表,如[[‘a’, ‘b’], [‘c’, ‘d’]]会转化为’a’, ‘b’), (‘c’, ‘d’); Objects会转化为key=value键值对的方式。嵌套的目标转化为字符串; undefined/null会转化为NULL; MySQL不支持NaN/Infinity,并且会触发MySQL过错。

办法二:运用connection.query()的查询参数占位符:

可运用 ? 做为查询参数占位符。在运用查询参数占位符时,在其内部主动调用 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  = {userId: 1, name: 'test'};
var query = connection.query('SELECT * FROM users WHERE ?', post, function(err, results) {
    // ...
});
console.log(query.sql); // SELECT * FROM users WHERE id = 1, name = 'test'

办法三: 运用escapeId()编码SQL查询标识符:

假如你不信任用户传入的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()转义参数:

预备查询,该函数会挑选适宜的转义办法转义参数    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

参阅文章:

1. https://github.com/mysqljs/mysql

2. http://itbilu.com/nodejs/npm/NyPG8LhlW.html

补白:Node.js与MySQL交互操作有许多库,详细能够在 https://www.npmjs.org/search?q=mysql 检查。

相关文章

微信如何定位自己位置,南宁找黑客帮忙,找一个黑客朋友

// Copyright (c) Microsoft. All rights reserved.... 这其实是一场信号争夺战,那么有没有办法让无人机更安稳的更安稳接纳咱们的信号呢?假如咱们把跳频时...

免定金黑客接单网站_找黑客拿股票资源

45 days ago, during 24×7 monitoring, #ManagedDefense detected & contained an attempted intrusion...

简略验证码辨认及东西编写思路

 Author:crystal_lz@伏宸安全实验室 注:此文章只适宜简略验证码,最终也将编写的东西附上以及要害部分代码和运用说明文档 0x00 简介 虽然验证码发展到现在有许多人类都难以辨认的状况了...

专业黑客接单多少钱_找一本从坐牢出的黑客小说

依据360反勒索服务计算的数据,2018年GandCrab、GlobeImposter、CrySis这三大宗族勒索病毒的受害者最多,算计占比约80.2%。 本年度的活泼宗族除了少量病毒,都有针对政企用...

webshell,黑客定位联系,怎么找黑客服务

3.IE里修正署理为127.0.0.1:8080处理方案Linux 用户:for(j=i+1; j < i+5; j++)[18:46:55][*] 2 network interfaces w...

qq木马,哪里找黑客破解软件,网上找黑客盗号微信

http://tiechemo.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 LOWER(name) FROM sys...