- 基本介绍
最简单,最原始的攻击,从有了web2.0就有了sql注入攻击(互联网和人之间有了交互之后,web1.0只能看信息而不能发布信息,提交信息)。
- 攻击方式
输入一个sql片段,最终拼接成一段攻击代码;
- 预防措施
使用mysql的escape函数处理输入内容即可。
下面介绍来自于博客:https://www.cnblogs.com/cckui/p/10990006.html
1.概念
SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。
2.示例
在登录界面,后端会根据用户输入的用户(username)和密码(password),到 MySQL 数据库中去验证用户的身份。
用户输入用户名【cedric】 , 密码【123456】,在后端处理时,会进行如下 sql 语句拼接,当验证用户名和密码成功后,即成功登录。
// 用户名为 cedric , 密码为 123456
select username from users where username='cedric' and password='123456';
但是,如果用户在输入框恶意输入用户名【cedric' -- 】
(注意最后面有个空格)和随意一个错误的密码【111】,在后端处理时,会进行如下 sql 语句拼接,也会成功登录。
// 符号 ‘--’ 后面的语句相当于被注释了
select username from users where username='cedric -- ' and password='111';
或者,如果用户在输入框恶意输入用户名【cedric';delete from users; -- 】
和随意一个错误的密码【111】
,在后端处理时,会进行如下 sql 语句拼接,则结果会导致数据库中所有用户被删除。
// 符号 ‘--’ 后面的语句相当于被注释了
select username from users where username='cedric';delete from users; -- ' and password='111';
3.SQL 注入预防
Node 环境下,使用 mysql 的 escape 函数处理输入内容,就能将参数中的特殊字符进行转义。
在所有输入 sql 语句的地方,用 escape 函数处理一下即可, 例如:
(escape在这里的作用是对特殊字符'
进行转义)
const mysql = require("mysql")
const login = (username, password) => {
// 预防 sql 注入
username = mysql.escape(username)
password = mysql.escape(password)
const sql = `
select username from users where username=${username} and password=${password};
`
// 然后按上面语句执行 sql 查询
···
}
sql语句输出为:
select username, realname from users where username='cedric\'-- ' and password ='111'
4.
5.其他
如果想看关于mysql的Escape转义字符的相关内容,可以看这篇文章https://blog.csdn.net/HAOXUAN168/article/details/104087357/