• 基本介绍

最简单,最原始的攻击,从有了web2.0就有了sql注入攻击(互联网和人之间有了交互之后,web1.0只能看信息而不能发布信息,提交信息)。

  • 攻击方式

输入一个sql片段,最终拼接成一段攻击代码;

  • 预防措施

使用mysql的escape函数处理输入内容即可。

下面介绍来自于博客:https://www.cnblogs.com/cckui/p/10990006.html

1.概念

  1. SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。

2.示例

在登录界面,后端会根据用户输入的用户(username)和密码(password),到 MySQL 数据库中去验证用户的身份。
用户输入用户名【cedric】 , 密码【123456】,在后端处理时,会进行如下 sql 语句拼接,当验证用户名和密码成功后,即成功登录。

  1. // 用户名为 cedric , 密码为 123456
  2. select username from users where username='cedric' and password='123456';

但是,如果用户在输入框恶意输入用户名【cedric' -- 】(注意最后面有个空格)和随意一个错误的密码【111】,在后端处理时,会进行如下 sql 语句拼接,也会成功登录。

  1. // 符号 ‘--’ 后面的语句相当于被注释了
  2. select username from users where username='cedric -- ' and password='111';

或者,如果用户在输入框恶意输入用户名【cedric';delete from users; -- 】和随意一个错误的密码【111】,在后端处理时,会进行如下 sql 语句拼接,则结果会导致数据库中所有用户被删除。

  1. // 符号 ‘--’ 后面的语句相当于被注释了
  2. select username from users where username='cedric';delete from users; -- ' and password='111';

3.SQL 注入预防

Node 环境下,使用 mysql 的 escape 函数处理输入内容,就能将参数中的特殊字符进行转义。
在所有输入 sql 语句的地方,用 escape 函数处理一下即可, 例如:
(escape在这里的作用是对特殊字符'进行转义)

  1. const mysql = require("mysql")
  2. const login = (username, password) => {
  3. // 预防 sql 注入
  4. username = mysql.escape(username)
  5. password = mysql.escape(password)
  6. const sql = `
  7. select username from users where username=${username} and password=${password};
  8. `
  9. // 然后按上面语句执行 sql 查询
  10. ···
  11. }

sql语句输出为:

  1. select username, realname from users where username='cedric\'-- ' and password ='111'

4.

5.其他

如果想看关于mysql的Escape转义字符的相关内容,可以看这篇文章https://blog.csdn.net/HAOXUAN168/article/details/104087357/