【发布时间】:2021-06-17 06:46:52
【问题描述】:
我正在构建一个简单的 API,API 的一部分应该返回 PG 数据库中给定列的所有唯一值。这一切都包含在使用无服务器框架的 lambda 函数中。除了这个之外,所有其他 API 都可以工作,当我手动将查询输入 PG 时,它们都可以工作。我不确定发生了什么,有什么建议吗?
失败的 API 命中示例:/columnVals/?field=title
const app = express();
const Pool = require("pg").Pool;
const pool = new Pool({
user: <USER>,
password: <PASSWORD>,
database: <DBNAME>,
host: <DBURL>,
port: <DBPORT>,
});
...
app.get("/columVals/", cors(), function (req, res) {
var all_query = `SELECT DISTINCT $1 FROM database_archive;`;
pool.query(all_query, [req.query.field], (error, results) => {
if (error) {
throw error;
}
res.status(200).json(results.rows);
let data = results.rows;
data = data.map((a) => Object.values(a));
data = data.flat().filter((n) => n);
data = [...new Set(data)];
res.status(200).json(data);
});
});
由于某种原因,这仍然有效(这显然容易受到 SQL 注入的影响,这就是您不使用它的原因)。
app.get("/columVals/", cors(), function (req, res) {
var all_query = `SELECT DISTINCT ${req.query.field} FROM database_archive;`;
pool.query(all_query, (error, results) => {
if (error) {
throw error;
}
res.status(200).json(results.rows);
let data = results.rows;
data = data.map((a) => Object.values(a));
data = data.flat().filter((n) => n);
data = [...new Set(data)];
res.status(200).json(data);
});
});
lambda 函数服务器错误是 500 代码内部服务器错误。我的问题是为什么要对参数进行清理,即使它不构成 SQL 注入攻击威胁,它也会失败。
【问题讨论】:
标签: postgresql lambda serverless-framework aws-serverless