在查询数据库时,我使用以下工作完美:
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