如何解决如何正确使用 UNNEST 而不会受到 sql 注入的影响
我正在尝试使用 Express.js 和 postgresql 在多对多关系表中一次插入多行。下面的解决方案有效,但是,我知道因为我没有使用值传递 homeType,所以它很容易受到 sql 注入的影响。
创建家庭控制器
const {
title,description,rules,telephone,homeType,// Array of ids example [1,2]
} = req.body;
try {
const results = await db.query(
'WITH step_one AS (INSERT INTO home (home_title,home_description,user_account_id,created_on) VALUES ($1,$2,$3,$4,$5,NOW()) RETURNING home_id) INSERT INTO home_category (home_id,home_category_id) SELECT home_id,UNNEST(ARRAY' +
JSON.stringify(homeType) +
') FROM step_one',[title,req.user]
);
} catch (err) {
console.error(err.message);
return res.status(500).send('Server Error');
}
res.status(201).json({ message: 'Home created successfully' });
如何以正确的方式从数组中插入多行?
解决方法
通过传递值并将参数输入转换/转换为查询语句中的实际数组来防止 SQL 注入。
要将对象转换为 postgresql 中的整数数组,请使用 $6::integer[]
完整查询如下:
const results = await db.query(
'WITH step_one AS (INSERT INTO home (home_title,home_description,rules,telephone,user_account_id,created_on) VALUES ($1,$2,$3,$4,$5,NOW()) RETURNING home_id) INSERT INTO home_category (home_id,home_category_id) SELECT home_id,UNNEST($6::integer[]) FROM step_one',[title,description,req.user,homeType]
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。