这个参数化查询是否对 SQL 注入开放?

cam*_*ing 3 sql postgresql sql-injection node.js

有人查看了我的代码,说下面的 SQL 查询 (SELECT * FROM...) 显然容易受到攻击。我已经对此进行了研究,看来我通过使用参数化查询正确地做到了这一点,但显然我遗漏了一些东西。

app.get("/api/v1/:userId", async (req, res) => {
    try {
        const teammate = await db.query("SELECT * FROM teammates WHERE uid = $1", [
            req.params.userId,
        ]);
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 6

该查询不对 SQL 注入开放,因为它使用参数化查询。数据不会替换参数 ( $1),而是在 \xe2\x80\x9cbind\xe2\x80\x9d 消息中单独发送,因此无论数据包含什么,它都不会被解释为 SQL 语句的一部分。

\n

而且,看起来参数是一个整数,SQL注入只能发生在字符串参数上。

\n