在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

node

91次阅读
没有评论

共计 2125 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

node-mysql 中怎么防止 SQL 注入,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

SQL 注入简介

SQL 注入是比较常见的网络攻击方式之一,它不是利用操作系统的 BUG 来实现攻击,而是针对程序员编程时的疏忽,通过 SQL 语句,实现无帐号登录,甚至篡改数据库。

node-mysql 中防止 SQL 注入

为了防止 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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2125字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 日本一级片免费观看 | 东方影库永久在线 | 国产一区免费观看 | 精品一区二区三区影片 | 国产一级特黄aa毛片 | 国产精品亚洲欧美大片在线观看 | 在线观看国产wwwa级羞羞视频 | 性久久久久久久久久久 | 99精品久久久中文字幕 | 亚洲第一页视频 | 国内精品久久久久 | 久久亚洲网 | 毛片毛片毛片 | 少妇无码一区二区二三区 | 亚洲精品嫩草研究院久久 | 亚洲福利午夜 | 高清性色生活片免费视频软件 | 国产成人福利免费观看 | 成人福利视频在线观看网 | 国产成人+综合亚洲+天堂 | 国产精品丝袜 | 高清性做爰免费无遮挡网站 | 少妇一区二区三区四区芒果tv | 中文字字幕码一二区 | 欧美久久久久久久一区二区三区 | 中文字幕一区二区三区免费看 | 精东天美麻豆果冻传媒mv | 午夜老司机福利 | 国产乱弄视频在线观看 | 久久在线精品视频 | 日韩av无码中文无码电影 | 久久精品国产亚洲av忘忧草18 | 中文字幕在线不卡视频 | 亚洲综合欧美综合 | 久久久精品视频在线观看 | 全国最大成人网 | 欧美aaaa黄色一级毛片 | 久久久久人妻一区二区三区 | 色婷婷国产精品欧美毛片 | 亚洲一线二线三线写真 | 国产成人久久777777 |