文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Node+mysql怎么实现SQL注入

2023-07-04 14:21

关注

这篇文章主要介绍“Node+mysql怎么实现SQL注入”,在日常操作中,相信很多人在Node+mysql怎么实现SQL注入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node+mysql怎么实现SQL注入”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

本文使用 NodeJS + MySQLSQL注入 进行讲解。

SQL注入攻击 是很古老的攻击方式了,自从 web2.0 诞生后就有 SQL注入攻击。它通常出现在 输入框文本域 等前端组件中。在输入的内容里加入 SQL语句 ,并一同传给后台。

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

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

SQL 注入演示

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

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

数据的意思是:

此时,在 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 测试

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

但如果此时,用户名输入的是 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.escapeconst 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' 后面的单引号被转义了。

到此,关于“Node+mysql怎么实现SQL注入”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯