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}a免费云主机域名ndpassword=${password};
`

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

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

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

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

相关推荐: jar包在linux服务器已经运行好但是访问不到地址如何解决

今天小编给大家分享一下jar包在linux服务器已经运行好但是访问不到地址如何解决的相关知识点,内容详细,逻辑清晰,免费云主机域名相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。今…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 02/21 14:38
Next 02/21 14:38

相关推荐