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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

mysql node null_node-mysql中防止SQL注入的方法总结相关推荐

  1. expressjs如何做mysql注入_node-mysql中防止SQL注入的方法

    大家都知道SQL注入对于网站或者服务器来讲都是一个非常危险的问题,如果这一方面没处理好的话网站可能随时给注入了,所以这篇文章就给大家总结了node-mysql中防止SQL注入的几种常用做法,有需要的朋 ...

  2. PHP中防止SQL注入的方法

    这里给大家推荐一款免费迭代 二开便捷的商城项目:源码直通车>>> [一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默 ...

  3. python防止源码泄露_Pyhton中防止SQL注入的方法

    c=db.cursor() max_price=5 c.execute("""SELECT spam, eggs, sausage FROM breakfast WHER ...

  4. php mysql防注入字符串过滤_php中防止SQL注入的方法

    最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下. 再说下mysql_real_escape_string和mysql_escape_st ...

  5. Python全栈(五)Web安全攻防之7.MySQL注入读写文件和HTTP头中的SQL注入

    文章目录 一.MySQL注入读写文件 1.搭建新的测试环境(靶场) 2.读写文件概述 3.读取文件 4.写入文件 二.HTTP头中的SQL注入 1.HTTP头中的SQL注入介绍 updatexml函数 ...

  6. MySQL注入读写文件、HTTP头中的SQL注入和cookie注入

    MySQL注入读写文件 MySQL数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(前提是权限足够) 读取前提: 1.用户权限足够高,尽量具有root权限 2. ...

  7. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一: mysql_real_escape_str ...

  8. decimal转为string sql_PHP+Mysql防止SQL注入的方法

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一:[1] mysql_real_escape_ ...

  9. mysql简单防注入_mysql防止sql注入的方法

    mysql防止sql注入的方法 发布时间:2020-08-25 14:07:29 来源:亿速云 阅读:98 作者:小新 这篇文章将为大家详细讲解有关mysql防止sql注入的方法,小编觉得挺实用的,因 ...

最新文章

  1. 机器学习中有哪些形式简单却很巧妙的 idea?
  2. 简述configure,pkg-config,pkg_config_path三者的关系
  3. REST技术第四步 多个參数注解问题
  4. 空白世界地图打印版_考研准考证打印什么时候_中国研究生招生信息网官网
  5. oracle 结果集已耗尽_java.sql.SQLException: 结果集已耗尽
  6. 使用DbVisualizer导出DB2创建序列SQL
  7. 大型网站高并发——服务器负载均衡设计
  8. linux远程桌面速度,【图片】linux下哪种远程桌面服务最快?_linux吧_百度贴吧
  9. 手机配置都赶上笔记本了
  10. 什么技术才值得你长期投入? | 凌云时刻
  11. 网站搭建 (第03天) 分页功能
  12. python机器学习算法.mobi_推荐《scikit-learn机器学习常用算法原理及编程实战》PDF版+epub版+源代码...
  13. 如何反编译dll文件
  14. CIM+规划:自带CIM平台的数字规划咨询服务,提升城市空间价值和产业活力
  15. .Net Core开发学习(一) ——Startup 类
  16. 数学建模学习笔记(一) 层次分析法
  17. Linux强制修改超级用户root密码
  18. Nginx具体配置(三)
  19. 多路IO转接——前导
  20. Windows10中使用IP地址添加网络打印机

热门文章

  1. 期货与期权(part8)--市场报价
  2. python基础(part12)--模块
  3. cmd mysql log_如何使用mysqlbinlog工具?
  4. SAP Spartacus SeoMetaService 的单元测试代码
  5. Angular Schematics 学习笔记
  6. 关于Visual Studio Code里进行SAP UI5开发的代码自动完成功能
  7. 使用Injection Token将字符串类型的参数注入到类的构造函数里
  8. SAP Spartacus的cxComponentWrapper指令
  9. 在Angular里使用rxjs的异步API - Observable
  10. how does framework know the Advertisement model should be used to parse json