你好,我正在使用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/