Luk*_*gen 10 node.js pg node-postgres
我正在使用node-postgres生产应用程序,我想知道是否有任何我应该关注的事项?数据是否自动消毒node-postgres?
我在github页面上找不到任何关于它的信息:https://github.com/brianc/node-postgres
Tua*_*ran 19
绝对!node-postgres中的参数化查询支持是第一类.所有转义都是由postgresql服务器完成的,确保方言,编码等方面的正确行为......例如,这不会注入sql:
Run Code Online (Sandbox Code Playgroud)client.query("INSERT INTO user(name) VALUES($1)", ["'; DROP TABLE user;"], function (err, result) { // ... });
这是他们的文档.
Ank*_*kit 15
它基本上取决于您如何按照@vitaly-t 的描述执行查询
假设您将在字符串中定义查询并执行如下:
var query = `SELECT * FROM table where username='${username}' and password='${password}`;
pool.query(query, (error, results) => {
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我会通过username = ' ' 或 1=1; --和密码= ' ' 或 1=1; ——
然后它将返回表中的所有记录(意味着 SQL 注入有效)
但是如果我要执行以下查询
pool.query('SELECT * FROM table where username=$1 and password=$2', [username, password], (error, results) => {
});
Run Code Online (Sandbox Code Playgroud)
那么 SQL 注入将永远不会起作用,因为 pg 会清理数据。
所以这取决于你如何执行查询。
这取决于您如何执行查询:
格式化通过Prepared Statements由服务器执行,它反过来从任何 SQL 注入清理您的查询。但它还有其他限制,例如您一次不能执行多个查询,并且您不能在需要时提供经过消毒的实体名称。
客户端查询格式,如pg-promise实现的格式,可以清理值,并在格式化实体名称和多个查询方面提供灵活性。
| 归档时间: |
|
| 查看次数: |
5917 次 |
| 最近记录: |