Node.JS -带参数的SQL server查询,防止SQL注入



在查询数据库时,我使用以下工作完美:

let conn = await sql.connect(process.env.connectionSetup)
let recordset = await conn.query("select * from POLICIES where policyid=912")
res.json(recordset)

问题是当添加一个参数,以防止SQL注入:

let conn = await sql.connect(process.env.connectionSetup)
let recordset = await conn.query("select * from POLICIES where policyid=:policy", { policy: 912})
res.json(recordset)

在这种情况下,我得到错误

UnhandledPromiseRejectionWarning: RequestError:语法错误":"。

我也试过使用?但我得到了同样的错误。这跟无聊有关吗!

谢谢。

为了防止SQL注入攻击,在SQL查询中插入值的安全方法是使用SQL参数.

实际语法可能因数据库使用的SQL方言和服务器驱动程序API而异。

对于nodejsmssql,你有标记的模板字面值形式为

sql.query`select * from POLICIES where policyid = ${policy}`

根据mssql文档

所有值都自动针对sql注入进行清理。这是因为它被呈现为预处理语句,因此MS SQL中对参数施加的所有限制都适用。例如,不能在使用变量的语句中传递/设置列名。

你可以使用

var request =  new sql.Request();
request.input('policyid',sql.VarChar,policy);
request.query("select * from POLICIES where policyid = @policyid");

详情请参考以下链接

https://www.npmjs.com/package/mssql sql注入

https://www.npmjs.com/package/mssql input-name-type-value

select * from POLICIES where policyid = ${policy}只是一个字符串。这不是一个带参数的请求。如果你这样做,你将打开sql注入。

看这个https://tediousjs.github.io/tedious/parameters.html

最新更新