返回顶部
首页 > 资讯 > 数据库 >一文讲解Node+mysql对SQL注入
  • 343
分享到

一文讲解Node+mysql对SQL注入

Node.js后端 2022-11-22 23:11:44 343人浏览 独家记忆
摘要

虽然现在不会直接使用 原生NodeJS 的方式开发后台,但了解一下 sql注入 还是很有必要的。本文使用 nodejs + Mysql 对 SQL注入 进行讲解。SQL注入攻击 是很古老的攻击方式了,自从 WEB2.0 诞生后就有 SQL注

虽然现在不会直接使用 原生NodeJS 的方式开发后台,但了解一下 sql注入 还是很有必要的。

本文使用 nodejs + MysqlSQL注入 进行讲解。

SQL注入攻击 是很古老的攻击方式了,自从 WEB2.0 诞生后就有 SQL注入攻击。它通常出现在 输入框文本域前端组件中。在输入的内容里加入 SQL语句 ,并一同传给后台。【相关教程推荐:nodejs视频教程】

后台一不小心就会将前端传过来的 SQL语句 拼接到自己的 SQL语句 中,最终拼接成一段攻击代码。

所以必须加以预防,不然有可能出现数据泄露,甚至被删库等可能。

SQL 注入演示

以登录为例,我在 mysql 中添加一个 users 表,里面存储用户名和密码。

users 表中,我创建了一条数据:insert into users (username, passWord, realname) values ('leihou', '123', '雷猴');

数据的意思是:

  • username: 'leihou'
  • password: '123'
  • realname: '雷猴'

此时,在 NodeJS 后台,我创建了一个登录方法

const mysql = require('mysql')

// 创建连接对象
const con = mysql.createConnection({
    host: 'localhost', // 地址
    user: 'root', // 连接数据库的用户
    password: '123456', // 连接数据库的密码
    port: '3306', // 默认端口
    database: 'testdb' // 数据库名
})

// 开始连接
con.connect()

// 统一执行 sql 的函数
function exec(sql) {
  const promise = new Promise((resolve, reject) => {
    con.query(sql, (err, result) => {
      if (err) {
        reject(err)
        return
      }
      resolve(result)
    })
  })
  return promise
}

// 登录方法
const login = (username, password) => {
  const sql = `
    select username, realname from users where username='${username}' and password='${password}';
  `

  console.log(sql)
  return exec(sql).then(rows => {
    return rows[0] || {}
  })
}

上面是登录方法。

最后可以通过 《NodeJS Http请求》 里提到的方法创建一个接口给前端。由于接口部分不是本文重点,所以这里打算略过(让我偷懒吧)。

此时再创建一个 html 页面,大概生成一下内容,然后使用 ajax后端对接。

如果你懒的话可以直接使用 postman 测试

01.png

根据上面的 登录方法 可以得知,前端输入以下内容就可以登录成功

  • 用户名:leihou
  • 密码:123

但如果此时,用户名输入的是 leihou' -- ,注意 -- 前后都有空格。那密码就可以随便输入了。

最后拼接出来的 SQL 语句是 select username, realname from users where username='leihou' -- ' and password='aslkfjsaf';

注意,密码我是随便输入的。

MySQL 里, -- 代表注释的意思。所以上面的语句就变成 查询 username 为 leihou 的那条数据 。自然就绕过了密码。

上面输入的 username 的内容绕过登录,泄露了信息。但如果别人要删掉你的表,那后果就非常严重了。

比如在用户名输入框内输入:leihou'; delete from users; --

直接就把 users 表给删掉了。

防止方法

SQL注入攻击 实在太古老了,有十几年历史了。所以基本的应对方法都成熟了。

比如将前端传过来的字符串进行转码。

使用 NodeJS 下载的 MySQL 依赖包里就提供了这个方法:escape

// 省略部分代码
const mysql = require('mysql')

// 省略创建连接对象
// 省略开始连接
// 统一执行 sql 的函数 exec 方法

const escape = mysql.escape

const login = (username, password) => {
  username = escape(username)
  password = escape(password)
  const sql = `
    select username, realname from users where username=${username} and password=${password};
  `

  console.log(sql)
  return exec(sql).then(rows => {
    return rows[0] || {}
  })
}

使用 escape 方法过滤后的字符串会被转义。

此时如果用户名输入 leihou' -- ,在后端控制台会打印出如下内容:

select username, realname from users where username='leihou\' -- ' and password='123345';

可以看到 leihou' 后面的单引号被转义了。

以上就是 MySQL 防范 SQL注入攻击 的方法。

以上就是一文讲解Node+mysql对SQL注入的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 一文讲解Node+mysql对SQL注入

本文链接: https://lsjlt.com/news/173483.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一文讲解Node+mysql对SQL注入
    虽然现在不会直接使用 原生NodeJS 的方式开发后台,但了解一下 SQL注入 还是很有必要的。本文使用 NodeJS + MySQL 对 SQL注入 进行讲解。SQL注入攻击 是很古老的攻击方式了,自从 web2.0 诞生后就有 SQL注...
    99+
    2022-11-22
    Node.js 后端
  • Node+mysql怎么实现SQL注入
    这篇文章主要介绍“Node+mysql怎么实现SQL注入”,在日常操作中,相信很多人在Node+mysql怎么实现SQL注入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node+mysql怎么实现SQL注入...
    99+
    2023-07-04
  • node-mysql中怎么防止SQL注入
    node-mysql中怎么防止SQL注入,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SQL注入简介SQL注入是比较常见的网络...
    99+
    2024-04-02
  • express.js如何做mysql注入与node-mysql中防止SQL注入方法解析
    大家都知道SQL注入对于网站或者服务器来讲都是一个非常危险的问题,如果这一方面没处理好的话网站可能随时给注入了,所以这篇文章就给大家总结了node-mysql中防止SQL注入的几种常...
    99+
    2023-05-18
    express mysql 防注入 SQL 注入 node-mysql
  • 一文了解pikachu的SQL注入
    前言: 本文章主要讲解关于pikachu的注入方式。 目录 前言: 一、数字型注入(post) 二、字符型注入(get) 三、搜索型注入 四、xx型注入 五、"insert/update"注入 六、"delete"注入 七、"http he...
    99+
    2023-10-04
    sql 数据库 mysql
  • MyBatis中防止SQL注入讲解
    SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)。 SQL注入,大家都不陌生,是一种常见的攻击方式。...
    99+
    2024-04-02
  • MyBatis图文并茂讲解注解开发一对一查询
    目录MyBatis的注解实现复杂映射开发一对一查询一对一查询的模型一对一查询的语句创建PersonMapper接口使用注解配置Mapper测试类一对一配置总结MyBatis的注解实现...
    99+
    2024-04-02
  • 一篇文章了解SQL注入漏洞
    目录SQL注入漏洞原理SQL注入内容注入条件SQL注释符与注入流程SQL注入分类SQLMap 分类接受请求类型区分注入数据类型的区分SQL注入思路手工注入思路SQL 详细注入过程总结...
    99+
    2024-04-02
  • SQL注入中布尔盲注的示例讲解
    这篇文章主要介绍“SQL注入中布尔盲注的示例讲解”,在日常操作中,相信很多人在SQL注入中布尔盲注的示例讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL注入中布尔盲注...
    99+
    2024-04-02
  • 一文搞懂SQL注入攻击
    目录1. 前言2. SQL注入简介(1)SQL语言(2)SQL注入3. SQL注入步骤(1)发现漏洞(2)信息收集(3)攻击Web系统(猜解用户名和密码)(4)获取管理员权限4. 防范SQL注入(1)使用参数化查询或存储...
    99+
    2023-04-19
    SQL注入攻击 SQL注入
  • MyBatis图文并茂讲解注解开发一对多查询
    目录MyBatis的注解实现复杂映射开发一对多查询一对多查询的模型一对多查询的语句创建StudentMapper接口使用注解配置Mapper测试类一对多配置总结MyBatis的注解实...
    99+
    2024-04-02
  • 实例讲解MyBatis如何防止SQL注入
     SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见。究其原因不外乎:No patch for stupid。为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样...
    99+
    2024-04-02
  • SQL注入报错注入函数图文详解
    目录前言常用报错函数用法详解updateXML()函数实例extractvalue()函数floor()函数exp()函数12种报错注入函数总结前言 报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏...
    99+
    2022-07-08
    sql注入解决方法 sql注入 报错注入 sql报错注入原理
  • Mybatis一对多和多对一处理的深入讲解
    目录建表 多对一处理 mapper实体类按照查询嵌套处理按照结果嵌套处理回顾Mysql多对一查询方式一对多处理mapper实体类按照查询嵌套处理按照查询嵌套处理结果映射面试高频点总结...
    99+
    2024-04-02
  • 一文详解嵌入式SQL
    目录嵌入式SQL概述使用嵌入式SQL的注意事项区分SQL语句与主语言语句数据库工作单元和程序工作单元之间的通信协调两种不同的处理方式嵌入式SQL程序的组成程序首都程序体在嵌入式SQL中使用游标检索多个元组游标定义语句游标...
    99+
    2023-01-17
    嵌入式SQL
  • 一文带你搞懂PHP对象注入
    目录背景漏洞案例PHP类和对象php magic方法php对象序列化序列化magic函数php对象注入常见的注入点其他的利用方法如何利用或者避免这个漏洞结论背景 php对象注入是一个...
    99+
    2024-04-02
  • 结合Mybatis聊聊对SQL注入的见解
    目录Mybatis聊聊对SQL注入的见解1.sql注入是什么2.sql注入实例(1)特殊符号,如 ' 和 .等(2)sql语句的注入(3)通过sql语句的in和order by进行注...
    99+
    2024-04-02
  • 一文带你深入了解Node中的Buffer类
    简单来说所谓的Buffer就是Node在V8堆内存之外分配的一块固定大小的内存空间。当Buffer被用console.log打印出来时,会以字节为单位,打印出一串以十六进制表示的值。创建Buffer了解完Buffer的基本概念后,我们再来创...
    99+
    2023-05-14
    前端 Node.js JavaScript
  • 【MySQL】一文带你了解SQL
    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! ...
    99+
    2023-09-06
    mysql sql 数据库
  • 图文详解HTTP头中的SQL注入
    目录1.HTTP头中的注入介绍2.HTTP User-Agent注入3.HTTP Referer注入4.sqlmap安全测试5.HTTP头部详解总结HTTP头中的SQL注入 1.HT...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作