我正在将node-postgres用于生产应用程序,我想知道是否有什么我应该关注的问题?数据是否由node-postgres自动清理
我在github页面上找不到任何关于它的东西:https://github.com/brianc/node-postgres
发布于 2017-01-04 18:27:21
这取决于您如何执行查询:
通过Prepared Statements进行格式化是由服务器执行的,服务器反过来会从任何SQL注入中清理您的查询。但它还有其他限制,比如您不能一次执行多个查询,并且在需要时不能提供经过清理的实体名称。
客户端查询格式化,如由pg-promise实现的查询格式化,可清理值,并在格式化实体名称和多个查询方面提供灵活性。
发布于 2017-01-04 11:49:01
绝对是
!node-postgres中的参数化查询支持是一流的。所有转义都由postgresql服务器完成,以确保跨方言、编码等的正确行为……例如,这不会注入sql:
client.query("INSERT INTO user(name) VALUES($1)","';DROP TABLE user;",function (err,result) { // ... });
这是来自他们的documentation。
发布于 2019-02-25 17:30:04
它基本上取决于您如何执行@vitaly-t所描述的查询
假设您将在字符串中定义查询,并按如下方式执行:
var query = `SELECT * FROM table where username='${username}' and password='${password}`;
pool.query(query, (error, results) => {
});这种情况下,如果我传递username=‘’或1=1;--和password=‘’或1=1;--
然后它将返回表中的所有记录(这意味着SQL注入起作用了)
如果我要执行以下查询,则为,但为
pool.query('SELECT * FROM table where username=$1 and password=$2', [username, password], (error, results) => {
});那么SQL注入将永远不会起作用,因为pg会净化数据。
因此,这取决于您如何执行查询。
https://stackoverflow.com/questions/41455585
复制相似问题