什么是sql注入?
用户通过注入sql语句到最终查询中,导致了整个sql与预期行为不符,本来是查询行为,却做了其他事情,比如添加/更改了数据
解决sql注入
关键点:sql变量的内容不作为任何sql关键字
使用:.execute()执行sql语句
代码实现
驱动程序使用的是mysql2
- npm install mysql2
- 引入依赖
- 创建连接池
- 定义sql语句,变量处用** ? **代替
- .execute(sql语句,[对应变量])解决sql注入
- .query()会导致sql注入,它的变量处是字符串拼接
async function query(id) {
const mysql = require('mysql2/promise');
const pool = await mysql.createPool({
host: 'localhost',
user: 'root',
password: 'root',
database: 'componeydb',
multipleStatements: true
})
// sql注入
// const sql = 'select * from company where id = ' + id;
// const [result] = await pool.query(sql, [id]);
// 防止sql注入
const sql = 'select * from company where id = ?';
const [result] = await pool.execute(sql, [id]);
console.log(result)
pool.end();
}
query("'';insert into `company` (name,location,buildDate) values ('字节跳动','中国北京海淀',curdate());")