Node.JS - 带参数的 SQL 服务器查询以防止 SQL 注入

Dan*_*lle 2 node.js

我使用以下内容在查询数据库时效果非常好:

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

问题是在添加参数时,为了防止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)
Run Code Online (Sandbox Code Playgroud)

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

UnhandledPromiseRejectionWarning:RequestError:“:”附近的语法不正确。

我也尝试过利用?但我得到同样的错误。这和无聊有关系吗?!

谢谢。

PA.*_*PA. 5

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

实际语法可能会有所不同,具体取决于数据库使用的 SQL 方言以及服务器驱动程序 API。

对于 Nodejs mssql,您已经以以下形式标记了模板文字

  sql.query`select * from POLICIES where policyid = ${policy}`
Run Code Online (Sandbox Code Playgroud)

根据mssql文档

所有值都会自动清理以防止 SQL 注入。这是因为它被呈现为准备好的语句,因此 MS SQL 对参数施加的所有限制都适用。例如,不能在使用变量的语句中传递/设置列名称。