课程名称: 新版 Node.js+Express+Koa2 开发Web Server博客
课程章节: 9-1 开始和sql注入
课程讲师: 双越
课程内容:
安全
- sql注入:窃取数据库内容
- xss攻击:窃取前端的 cookie 内容
- 密码加密:保障用户信息安全(重要)
补充:
- server端攻击防水非常多,预防手段也非常多
- 本课只讲解常见的、能通过 web server(nodejs)层面预防的
- 有些攻击需要硬件和服务来支持(需要 OP 服务器运维人员支持),如DDOS
sql注入:
- 最原始、最简单的攻击,从有了 web2.0 就有了 sql 注入攻击
- 攻击方式:输入一个 sql 片段,最终拼接成一段攻击代码
- 预防措施:使用 mysql 的 escape 函数处理输入内容即可
代码演示
当前登录代码sql如下
const sql = `
select username, realname from users where username='${username}' and password='${password}'
`;
并没有对sql注入做处理,就会在登录时发生如下情况:
当在用户名输入 zhangsan' --
时,密码随意输入也能登录的情况,原因是 – 在sql 中是注释的意思,表示注释后面sql,所以我们上面sql就会变成下面的样子:
select username, realname from users
where username='zhangsan' --' and password='1'
后面的密码就被注释掉了,也就是说不用写密码,就能登录当前账号。
处理
使用mysql 提供的方法 escape()
const mysql = require("mysql");
username = mysql.escape(username);
password = mysql.escape(password);
const sql = `
select username, realname from users where username=${username} and password=${password}
`;
这样就可以防止 sql 注入,要在每一个sql语句中写 escape 方法
课程收获:
- 了解sql注入是什么
- 明白如何处理 sql 注入