防止 SQL 注入的正确方法?

问题描述 投票:0回答:1

假设我有下面的代码,其中studentId来自用户输入,

const sql  = 'select Name from student where Id = ' + studentId;
connection.exec(sql)

上面的代码肯定容易出现SQL注入。我想知道以下两个选项是否都可以解决 SQL 注入攻击并且是否相同。

选项 1. 使用 PL/SQL 变量声明并将用户输入与模板绑定

const sql  = `DECLARE @Id=${studentId}; select Name from student where Id = @Id;`;
connection.exec(sql)

选项2.使用库提供的参数选项

const sql  = 'select Name from student where Id = @Id;';
parameters.add({name: Id, value: studentId})
connection.exec(sql,parameters)
node.js sql-injection
1个回答
0
投票

最好的 apoach 是使用从对象连接执行的函数,发送请求和参数。

function prepareSQL() {
  const sql = `INSERT INTO USERS VALUES (@val1, @val2)`;

  const request = new Request(sql, (err, rowCount) => {
    if (err) {
      throw err;
    }

  });

  // Must add parameters
  request.addParameter('val1', TYPES.Int);
  request.addParameter('val2', TYPES.Int);

  request.on('prepared', () => {
    console.log('request prepared');
    executePreparedSQL(request);
  });

  connection.prepare(request);
}

function executePreparedSQL(request) {
  connection.execute(request, { val1: 1, val2: 2 });

  request.on('requestCompleted', () => {
    console.log('DONE!');
    connection.close();
  });
}

您可以在此处查看示例。

有关函数执行的更多信息,请参阅官方文档

© www.soinside.com 2019 - 2024. All rights reserved.