Hello Stackoverflow社区! :)
我在Firebase上运行了一个云功能,它作为一个API,还有另一个服务器(fitbit.com),偶尔会将数据发送到我的服务器。
作为安全功能之一,我想做一个Forward-Confirmed Reverse DNS,基本上如下:
这是为节点v6.11.1编写的源代码(它在Util类中..:))
static fcrDns(ipAddress, cb) {
const reverse = Q.denodeify(dns.reverse);
const resolve4 = Q.denodeify(dns.resolve4);
return reverse(ipAddress).then(hostNames => {
console.log("hostNames: ", hostNames);
if (!hostNames.every(SecurityUtils._isFitbitSubDomain)) {
return Promise.reject("Hostname did not end with .fitbit.com");
} else {
return Promise.all([...hostNames.map(hostName => {
return resolve4(hostName)
.then(resolvedAddresses => {
if (resolvedAddresses.every(address => address === ipAddress)) {
return Promise.resolve(true);
} else {
return Promise.reject("Resolved address did not equal to initial IP address");
}
})
})]);
}
});
}
static _isFitbitSubDomain(hostName) {
return hostName.endsWith(".fitbit.com");
};
现在,问题是:如果我在windows和Linux主机上的localhost上执行firebase serve --only函数,这将完美地运行。
但是,一旦将其部署到Firebase并执行,我就会收到以下错误:
{ Error: getHostByAddr ENOTFOUND 169.45.142.104
at errnoException (dns.js:28:10)
at QueryReqWrap.onresolve [as oncomplete] (dns.js:219:19)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getHostByAddr',
hostname: '169.45.142.104' }
据我了解节点的源代码,这意味着它无法执行反向IP查找。
但是,正如我测试的那样,解析主机名可以正常工作。
可能存在服务器设置,这可能会阻止进行反向DNS查找,但允许解析?
答案 0 :(得分:0)
我与云功能后端团队进行了交谈,他们目前不允许反向DNS查找。这是可以改变的,所以我鼓励你file a feature request详细说明为什么这对你很重要。另请在SO上提供此问题的链接。
编辑:看起来改变是为了允许这样做,但我不清楚它是否已经可用,或者何时可用。