Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在生产PostgreSQL连接中将rejectUnauthorized设置为false可以吗?_Node.js_Postgresql_Ssl_Heroku Postgres_Pg Promise - Fatal编程技术网

Node.js 在生产PostgreSQL连接中将rejectUnauthorized设置为false可以吗?

Node.js 在生产PostgreSQL连接中将rejectUnauthorized设置为false可以吗?,node.js,postgresql,ssl,heroku-postgres,pg-promise,Node.js,Postgresql,Ssl,Heroku Postgres,Pg Promise,我们最近搬到了Heroku,在尝试将我们的应用程序连接到DB时,它一直拒绝我们的查询,并显示消息“自签名证书”。传递rejectUnauthorized解决了这个问题,但现在我想知道,我们应该在生产中这样做吗?如果没有,我们连接Heroku PG数据库的合适方式是什么 const pgp=require('pg-promise')(/*initOptions*/); const{ConnectionString}=require('connection-string'); const cnObj

我们最近搬到了Heroku,在尝试将我们的应用程序连接到DB时,它一直拒绝我们的查询,并显示消息“自签名证书”。传递
rejectUnauthorized
解决了这个问题,但现在我想知道,我们应该在生产中这样做吗?如果没有,我们连接Heroku PG数据库的合适方式是什么

const pgp=require('pg-promise')(/*initOptions*/);
const{ConnectionString}=require('connection-string');
const cnObj=新连接字符串(process.env.DATABASE_URL);
常数cn={
主机:cnObj.hostname,
港口:cnObj.port,
数据库:cnObj.path?[0],
用户:cnObj.user,
密码:cnObj.password,
ssl:{
拒绝:错误,
},
};
常数db=pgp(cn);

您面临的风险是有人在您和Heroku服务器之间进行干扰,并冒充后者。然后,他们可以向您出示自己的证书,并与您协商连接。中间的人也可以将服务器的挑战传递给你,并使用你的响应登录到数据库服务器代替你。 所有这些都假设攻击者可以控制您和Heroku服务器之间的一个网络节点


所以我想说,虽然存在残余风险,但我不会因此而失眠,除非你处理的是非常敏感的数据,在这种情况下,偏执是一种美德。

更正代码以获得更好的
连接字符串
使用。除此之外,
pg promise
没有问题,它是严格的身份验证配置,这在以前已经被多次解决过-。如果您只是遵循,您将了解真相。谢谢@vitaly-t。一个永远的救命恩人。如果他们可以模拟服务器,并且Postgres服务器使用基于密码的身份验证方法(我认为Heroku上的Postgres会这样做),那么攻击者也可以嗅探密码。IMO这是不可接受的。在密码身份验证过程中从未发送密码。但您是对的,攻击者仍然可以登录。我会修正答案的。谢谢,再次投票。关于信息,Heroku似乎默认使用MD5auth方法()。这确实没有通过隧道发送密码,而是发送了username/password/salt的MD5表示形式()-请参阅此答案以了解有关此问题的意见:@Michael您链接到的问题的公认答案在许多帐户上都是完全错误的。事实上,PostgreSQL使用MD5的方式是安全的,除了哈希计算成本低,这使得暴力攻击更容易。不确定它是否“完全错误”。它可能没有足够强调随机盐的使用。进一步考虑,MITM攻击者可能会简单地要求客户端进行明文密码验证。问题中使用的npm客户端构建在支持明文身份验证的基础上,由服务器决定。所以,这是不可接受的。