javascript - 为什么node.js中的mysql多语句选项会增加SQL注入(inject)的范围?

标签 javascript mysql node.js

你好,我正在使用node.js和mysql开发服务器。当我阅读一些有关 mysql 库的文档时,我发现打开多个语句选项会增加 SQL 注入(inject)攻击的范围。

我知道如果我使用带“?”的 SQL 语法会转义 SQL 语法。所以我想如果我使用 ?使用多个查询,无法进行SQL注入(inject)攻击。这样对吗?

例如,

let sql = "UPDATE auth_user SET last_login=now() WHERE username=?; SELECT id,nickname FROM auth_user WHERE username = ? LIMIT 1"; 让 params = [用户名, 用户名]; pool.getConnection(函数(错误, conn){ conn.query(sql, params, (err, datas, fields)=>{..}

如果有人给出“foo'; DROP TABLE auth_user;--”用户名参数来进行SQL注入(inject),mysql库不会自动将参数读取为带有转义字符串的字符串吗?然后我猜测产生SQL注入(inject)攻击的可能性和单个语句是一样的。

为什么多个语句选项会增加 SQL 注入(inject)的范围?如何安全地使用多个语句?

最佳答案

SQL 注入(inject)坏'); DROP TABLE 用户 -- 可能会导致以下 SQL:

INSERT INTO users (firstname, lastname) VALUES ('bob', 'bad'); DROP TABLE users --')

如果在单个查询中禁用多个语句,则这种情况是不可能的,因为只会执行第一个语句。

通过启用多个语句,您将面临这样的 SQL 注入(inject)攻击。这“扩大了 SQL 注入(inject)攻击的范围”,但如果您已经在使用准备好的语句,那么您应该免受 SQL 注入(inject)攻击。

关于javascript - 为什么node.js中的mysql多语句选项会增加SQL注入(inject)的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284799/

相关文章:

javascript - 使用 AngularJS 在悬停时上下滑动框

javascript - PHP 脚本的 AJAX 响应不起作用

python - 将 mysql 数据库上传到支持 python 的网络服务器

php - 仅当 "rare"列值= 1时如何导出mysql数据

javascript - 错误 : read ECONNRESET when inserting data into table

javascript - 需要转换JSON格式

javascript - 如何通过javascript将unix纪元转换为[年,月,日]

mysql 2查询到1

node.js - 如何退出nodejs Debug模式退出

node.js - 如何动态创建 Mongoose 模式?