你好,Stackoverflow社区!:)
我在Firebase上运行了一个云函数,它充当API,还有另一个服务器(fitbit.com),它偶尔会将数据发布到我的服务器上。
作为安全特性之一,我想做一个前向确认的反向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主机上)提供防火墙服务,这是非常有效的。
但是,一旦将其部署到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查找,但允许解析?
发布于 2018-02-02 17:52:50
我与云函数后端团队进行了交谈,他们目前不允许反向DNS查找。这是可以更改的内容,因此我将鼓励您使用提交功能请求,并详细说明为什么这对您很重要。还提供了一个链接到这个问题的SO。
编辑:看起来修改是为了允许这样做的,但我不清楚它是否已经可用,或者什么时候可以使用。
https://stackoverflow.com/questions/48548085
复制相似问题