本文涉及
- sql 注入: 窃取数据库内容
- xss 攻击:窃取前端的 cookie 内容
- 密码加密: 保障用户信息安全
sql 注入
- 最原始、最简单的攻击,从有了 web2.0 就有了 sql 注入攻击
- 攻击方式∶输入一个 sql 片段,最终拼接成一段攻击代码
- 预防措施∶使用 mysql 的 escape 函数处理输入内容即可
示例
比如一个只需要输入用户名和密码的登录界面:
假如用户在输入用户名的时候,在后面加上'--
(单引号–空格),比如用户gougou
输入: gougou'--
,那输入的密码不正确也能登录成功。因为这样做相当于把后面的 sql 注释掉了。甚至可以在输入用户名之后拼接 sql 语句执行其他更危险的操作。
举个例子:
一开始,gougou
登录的时候正常输入用户名gouguo
,密码liyi
,sql 语句如下:select * from users where username='gougou' and password='liyi';
后来gougou
使坏,用户名输入为gougou'--
,这时候密码随便怎么输都无所谓,比如输入123,也能正确查询出该用户信息:
如何预防
通过 mysql 自带的 escape 函数处理输入内容。对用户输入的内容进行转义。
代码示例
db-mysql.js:
const mysql = require('mysql')
const {
MYSQL_CONF } = require('../conf/db')
// 创建连接对象
const con = mysql.createConnection(MYSQL_CONF)
// 开始连接
con.connect()
// 统一执行 sql 的函数
function exec(sql) {
return new Promise((resolve, reject) => {
con.query(sql, (err, result)=>{
if(err) return reject(err)
resolve