pg(node-postgres)是否自动清理数据

Does pg (node-postgres) automatically sanitize data

我正在将 node-postgres 用于生产应用程序,我想知道是否有什么我应该关注的?数据是否由 node-postgres 自动清理?

我在 github 页面上找不到任何相关信息:https://github.com/brianc/node-postgres

Absolutely! The parameterized query support in node-postgres is first class. All escaping is done by the postgresql server ensuring proper behavior across dialects, encodings, etc... For example, this will not inject sql:

client.query("INSERT INTO user(name) VALUES()", ["'; DROP TABLE user;"], function (err, result) {
  // ...
});

这是来自他们的 documentation

这取决于您如何执行查询:

通过 Prepared Statements 的格式化由服务器执行,这反过来会从任何 SQL 注入中清除您的查询。但它还有其他限制,比如您不能一次执行多个查询,并且您不能在需要时提供经过清理的实体名称。

客户端查询格式化,就像 pg-promise 实现的那样,净化值,并提供格式化实体名称和多个查询的灵活性。

这基本上取决于您如何按照@vitaly-t 所述执行查询

假设你将在一个字符串中定义查询并执行如下:

var query = `SELECT * FROM table where username='${username}' and password='${password}`;
        
pool.query(query, (error, results) => {
});

这种情况下如果我要传递用户名=''or 1=1; -- and password=''或1=1; --

然后它将 return 来自 table 的所有记录(意味着 SQL 注入工作)

但是如果我执行下面的查询

pool.query('SELECT * FROM table where username= and password=', [username, password], (error, results) => {
});

那么 SQL 注入将永远不会起作用,因为 pg 会清理数据。

所以这取决于您如何执行查询。