分享更有价值
被信任是一种快乐

Node+mysql怎么实现SQL注入

文章页正文上

这篇文章主要介绍“Node+mysql怎么实现SQL注入”,在日常操作中,相信很多人在Node+mysql怎么实现SQL注入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node+mysql怎么实现SQL注入”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!虽然现在不会直接使用 原生NodeJS 的方式开发后台,但了解一下 SQL注入 还是很有必要的。本文使用 NodeJS + MySQLSQL注入 进行讲解。SQL注入攻击 是很古老的攻击方式了,自从 web2.0 诞生后就有 SQL注入攻击。它通常出现在 输入框文本域 等前端组件中。在输入的内容里加入 SQL语句 ,并一同传给后台。后台一不小心就会将前端传过来的 SQL语句 拼接到自己的 SQL语句 中,最终拼接成一段攻击代码。所以必须加以预防,不然有可能出现数据泄露,甚至被删库等可能。以登录为例,我在 MySQL 中添加一个 users 表,里面存储用户名和密码。在 users 表中,我创建了一条数据:insert into users (username, password, realname) values ('leihou', '123', '雷猴');数据的意思是:username: 'leihou'password: '123'realname: '雷猴'此时,在 NodeJS 后台,我创建了一个登录方法

constmysql=require('mysql')

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

//开始连接
con.connect()

//统一执行sql的函数
functionexec(sql){
constpromise=newPromise((resolve,reject)=>{
con.query(sql,(err,result)=>{
if(err){
reject(err)
return
}
resolve(result)
免费云主机、域名})
})
returnpromise
}

//登录方法
constlogin=(username,password)=>{
constsql=`
selectusername,realnamefromuserswhereusername='${username}'andpassword='${password}';
`

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

上面是登录方法。最后可以通过 《NodeJS http请求》 里提到的方法创建一个接口给前端。由于接口部分不是本文重点,所以这里打算略过(让我偷懒吧)。此时再创建一个 HTML 页面,大概生成一下内容,然后使用 Ajax 与后端对接。如果你懒的话可以直接使用 postman 测试根据上面的 登录方法 可以得知,前端输入以下内容就可以登录成功用户名: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

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

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

constescape=mysql.escape

constlogin=(username,password)=>{
username=escape(username)
password=escape(password)
constsql=`
selectusername,realnamefromuserswhereusername=${username}andpassword=${password};
`

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

使用 escape 方法过滤后的字符串会被转义。此时如果用户名输入 leihou' -- ,在后端控制台会打印出如下内容:

selectusername,realnamefromuserswhereusername='leihou'--'andpassword='123345';

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

相关推荐: JS轻量编辑器怎么使用

本文小编为大家详细介绍“JS轻量编辑器怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS轻量编辑器怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一款纯 JS 实现的轻量化图片编辑器如果上面的场景是你所遇见的, 也想…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册