这个 javascript 容易受到 SQL 注入的影响吗?[复制]

Is this javascript vulnerable to SQL Injection? [duplicate]

提问人:Ace McCloud 提问时间:8/30/2023 最后编辑:Ace McCloud 更新时间:8/31/2023 访问量:74

问:

我正在使用 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';从员工中选择*;

但它似乎总是一起执行查询,告诉我没有找到结果。

  1. 我将对查询进行参数化,但想知道当前的漏洞级别是多少?
  2. 对于参数化,如果我在代码中的许多不同位置有上述相同的 3 个语句,我将如何去做?每个查询的形状都不同,因此不太确定我是否可以将它们移动到通用方法。相反,我将不得不重构所有地方?
javascript sql注入 node-postgres sqlmap

评论

0赞 esqew 8/30/2023
它极有可能易受攻击,但您的示例使用的变量名称与模板字符串不同;如果这是您真正测试的内容,我不希望它会影响查询的执行。如果这不是你测试的内容,我建议更新你的示例,以准确显示你做了什么。目前还不清楚您的抽象是否将此查询传递给任何允许对单个查询文本进行多个查询的内容,这将阻止您的测试字符串证明它是否确实可利用。run()
1赞 David 8/30/2023
这回答了你的问题吗?防止使用 Nodejs 和 Postgres 进行 SQL 注入
2赞 Frank Heikens 8/30/2023
字符串连接从来都不是安全的,它不可能是:它只是生成一个字符串。然后,在数据库中将此字符串作为 SQL 的一部分(数据库命令的集合)执行。无论那个命令是什么......
2赞 Bergi 8/30/2023
"告诉我没有找到结果“——这并不意味着它是安全的。只是通过一些东西,就像看到危险一样。employee_id = "0'; UPDATE employee SET role = 'admin' WHERE employee_id = '123"
2赞 Bergi 8/30/2023
"如果我在代码中的很多不同地方都有相同的 3 个语句,我该怎么做?- 这似乎与您关于如何通过参数化查询修复 SQLI 漏洞的问题无关。在使用查询的所有位置对查询进行参数化。如果在多个位置有相同的查询,并且不知道如何重构此查询以避免重复代码,则可以就此提出单独的问题。请在那里张贴所有三个地方的代码。

答:

-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/......