提问人:Ace McCloud 提问时间:8/30/2023 最后编辑:Ace McCloud 更新时间:8/31/2023 访问量:74
这个 javascript 容易受到 SQL 注入的影响吗?[复制]
Is this javascript vulnerable to SQL Injection? [duplicate]
问:
我正在使用 node-postgres 库。
const sql = `
SELECT *
FROM "Employees"
where employee_id = '${employee_id}' ;
`;
console.log(`Query formatted: ${sql}`);
const result = await this.db.run(sql)
DB Run 方法如下所示
async run(sql) {
let retVal = "";
let client;
try {
await this.init();
console.log(`Connecting to ${this.connection.host}`);
client = new pg.Client(this.connection);
await client.connect();
console.log(`inner sql: ${sql}`);
const res = await client.query(sql);
retVal = res.rows;
client.end();
} catch (e) {
console.log(`ERROR: ${e}`);
retVal = e;
client.end();
}
return retVal;
}
employee_id通过用户输入作为 POST 调用传递。
SQLMAP告诉我这是易受攻击的,但我尝试了不同的输入,例如
employee_id = “123';从员工中选择*;
但它似乎总是一起执行查询,告诉我没有找到结果。
- 我将对查询进行参数化,但想知道当前的漏洞级别是多少?
- 对于参数化,如果我在代码中的许多不同位置有上述相同的 3 个语句,我将如何去做?每个查询的形状都不同,因此不太确定我是否可以将它们移动到通用方法。相反,我将不得不重构所有地方?
答:
-1赞
synnøve
8/30/2023
#1
JavaScript 不会自动清理输入,Node 也不会,所以这绝对是脆弱的。
有关详细信息,请参阅 https://github.com/mysqljs/mysql#escaping-query-values(防止 Node 中的 SQL 注入.js中的第一个答案)
评论
0赞
Jared Smith
8/30/2023
stackoverflow.com/questions/22310812/......
评论
run()
employee_id = "0'; UPDATE employee SET role = 'admin' WHERE employee_id = '123"