sql - 这个参数化查询是否对SQL注入(inject)开放?

有人查看我的代码说下面的 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,
        ]);

最佳答案

该查询不对SQL注入(inject)开放,因为它使用了参数化查询。数据不会代替参数 ($1),而是在“绑定(bind)”消息中单独发送,因此无论数据包含什么,都不会被解释为 SQL 语句的一部分。

此外,看起来参数是一个整数,SQL 注入(inject)只能发生在字符串参数上。

https://stackoverflow.com/questions/69292758/

相关文章:

python - 基于 2 个数据帧的 pandas 高效数据操作

c++ - C++20 中的新型自动生成构造函数

r - 使用 dplyr 嵌套或分组两个变量,然后对数据执行 Cronbach's alpha 函数

python - 如何在 glob() 模式中写入 "or"?

rust - Vec> 按第一个元素升序排序,当第一个元素相等时按第二个元素降序排

html - 使用图像标签在网页上显示原始像素阵列

python - 如何使用 Python 加密大文件?

python - 使用 dataframe pandas 中的 value_counts 创建新列

julia - Julia 中具有评估/计算属性的结构

javascript - 如何使用新的 Webpack devServer 配置?