这篇文章主要介绍“Node+mysql怎么实现SQL注入”,在日常操作中,相信很多人在Node+mysql怎么实现SQL注入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node+mysql怎么实现SQL注入”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!虽然现在不会直接使用 原生NodeJS 的方式开发后台,但了解一下 SQL注入
还是很有必要的。本文使用 NodeJS
+ MySQL
对 SQL注入
进行讲解。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举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。