node中解决sql注入问题

本文深入解析SQL注入原理,展示如何利用参数化查询防止SQL注入,确保数据库操作安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是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());")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值