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

时间:2017-01-04 03:02:18

标签: node.js pg node-postgres

我正在使用node-postgres作为生产应用程序,我想知道是否有任何我应该关注的内容?数据是否由node-postgres自动清理?

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

3 个答案:

答案 0 :(得分:10)

  

绝对! node-postgres中的参数化查询支持是第一类。所有转义都是由postgresql服务器完成的,确保方言,编码等方面的正确行为...例如,这不会注入sql:

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

这是来自documentation

答案 1 :(得分:2)

这取决于您执行查询的方式:

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

为值清理常规查询格式,虽然它提供了格式化实体名称和多个查询的灵活性,但它不提供针对SQL注入的保护。

答案 2 :(得分:1)

这基本上取决于您如何执行@ vitaly-t描述的查询

假设您将在字符串中定义查询并按以下步骤执行

var query = `SELECT * FROM table where username=${username} and password=${password}`;

pool.query(query, (error, results) => {
 });

这种情况下,如果我会通过 username = ''或1 = 1; -密码 = ''或1 = 1; - 比它将提供该表中的所有记录(意味着sql伤害有效)

但是如果我要执行查询,请遵循

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

比sql注入永远无法工作,因为pg会清理数据 因此,这取决于您如何执行查询。