使用Nodejs和Postgres防止SQL注入
我正在开发一个与PostgreSQL数据库进行交互的后端,并且正在寻找防止SQL注入的帮助。我了解SQL注入的概念,并且在网上找到了一些防止这些攻击的示例,但是不确定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()
)的标准查询:
SELECT
query("SELECT profilename, profiledescription, approved FROM profiledb
WHERE usercompany='"+ req.query.userCompany +"';").then(data => {
res.send(data)
})
UPDATE
query("UPDATE profiledb SET approved='Approved' WHERE id='"+ req.query.id +"';").then(data =>
res.send(data)
)
INSERT
query("INSERT INTO profiledb (profilename, profiledescription, approved) VALUES ('"+
req.query.profileTitle +"', '"+ req.query.profileBody +"', 'Pending');");
我可以使用什么代码来查询数据而不会冒着SQL注入攻击的风险。
感谢!
回答如下:使用parameterized query并将您的请求参数作为values
传递。
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)
})
使用Nodejs和Postgres防止SQL注入
我正在开发一个与PostgreSQL数据库进行交互的后端,并且正在寻找防止SQL注入的帮助。我了解SQL注入的概念,并且在网上找到了一些防止这些攻击的示例,但是不确定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()
)的标准查询:
SELECT
query("SELECT profilename, profiledescription, approved FROM profiledb
WHERE usercompany='"+ req.query.userCompany +"';").then(data => {
res.send(data)
})
UPDATE
query("UPDATE profiledb SET approved='Approved' WHERE id='"+ req.query.id +"';").then(data =>
res.send(data)
)
INSERT
query("INSERT INTO profiledb (profilename, profiledescription, approved) VALUES ('"+
req.query.profileTitle +"', '"+ req.query.profileBody +"', 'Pending');");
我可以使用什么代码来查询数据而不会冒着SQL注入攻击的风险。
感谢!
回答如下:使用parameterized query并将您的请求参数作为values
传递。
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)
})