gpt4 book ai didi

node.js - 使用 Nodejs 和 Postgres 防止 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-11-29 14:05:41 24 4
gpt4 key购买 nike

我正在开发一个后端来与 PostgreSQL 数据库交互,并且正在寻找一些帮助来防止 SQL 注入(inject)。我了解 SQL 注入(inject)的概念,并在网上找到了一些预防这些攻击的示例,但不确定预防技术是否因 SQL 提供商而异。

这是我用来查询数据的函数:

var pg = require("pg");

var client = new pg.Client(connectionString);
client.connect();

module.exports = async function newQuery(query) {
var result = await client.query({
rowMode: 'array',
text: query
});
return result.rows
}

下面是一些使用该函数的标准查询 (query()):

选择

query("SELECT profilename, profiledescription, approved FROM profiledb 
WHERE usercompany='"+ req.query.userCompany +"';").then(data => {
res.send(data)
})

更新

query("UPDATE profiledb SET approved='Approved' WHERE id='"+ req.query.id +"';").then(data =>
res.send(data)
)

插入

query("INSERT INTO profiledb (profilename, profiledescription, approved) VALUES ('"+ 
req.query.profileTitle +"', '"+ req.query.profileBody +"', 'Pending');");

我可以使用什么代码来查询数据而不冒 SQL 注入(inject)攻击的风险。

谢谢!!!

最佳答案

使用 parameterized query并将您的请求参数作为 values 传递.

module.exports = async function newQuery(query, values) {
var result = await client.query({
rowMode: 'array',
text: query,
values
});
return result.rows
}

query("SELECT profilename, profiledescription, approved FROM profiledb WHERE usercompany=$1;", [req.query.userCompany]).then(data => {
res.send(data)
});

query("UPDATE profiledb SET approved='Approved' WHERE id=$1;", [req.query.id]).then(data => {
res.send(data)
})

query("INSERT INTO profiledb (profilename, profiledescription, approved) VALUES ($1, $2, 'Pending');", [req.query.profileTitle, req.query.profileBody]);

关于node.js - 使用 Nodejs 和 Postgres 防止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com