我正在使用node-postgres
作为生产应用程序,我想知道是否有任何我应该关注的内容?数据是否由node-postgres
自动清理?
我在github页面上找不到任何关于它的信息:https://github.com/brianc/node-postgres
答案 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会清理数据 因此,这取决于您如何执行查询。