如何防止直接访问 IP Express node.js
Posted
技术标签:
【中文标题】如何防止直接访问 IP Express node.js【英文标题】:How to prevent direct access to IP Express node.js 【发布时间】:2021-08-29 21:11:30 【问题描述】:我在网上的任何地方都找不到这方面的资源,我看到的只是 nginx 的参考资料。
我需要快速帮助,因为我的服务器是实时的,用户访问它并且谷歌以某种方式索引了我的 IP 地址并且用户正在通过我的 IP 访问我的网站。
我计划今晚迁移服务器,并且知道为什么我的 ip 被编入索引,但同时需要一种方法来防止通过我的 ip 直接访问。
这显然是行不通的,也没有太多的测试空间,除非我停止服务器并长时间关闭所有用户:
app.get('myiphere', function(req, res)
res.redirect('domain.com');
);
【问题讨论】:
您到底关心什么。与您的服务器的所有连接都是通过您的 IP 地址进行的。 TCP 连接仅适用于 IP 地址。如果一个人只有一个域,那么您使用 DNS 获取与该域对应的 IP 地址,然后连接到该 IP 地址。这就是 TCP 的工作原理(这是 HTTP 的传输方式)。 @jfriend00 我了解 IP 与 DNS 和互联网的关系。但据我了解,将您的 IP 暴露在互联网上并不好?这不会使您容易受到某些类型的攻击吗?如果有人可以访问我的服务器 IP,他们可以直接绕过 cloudflare ddos 保护和 DDoS 我的服务器,他们不能吗? 您在 DNS 中的 IP 地址应该已经通过了所有 cloudfare 保护和基础设施。每个人都必须通过该 IP 地址访问您的服务器。如果人们通过其他 IP 地址而不是 DNS 中的 IP 地址(一些不应该公开访问的 IP)直接访问您的服务器,那么您需要使用适当的防火墙规则或其他方式来修复它。 仅供参考,典型的托管基础设施将有您的服务器的实际 IP 地址无法访问互联网。相反,您的主机名的 DNS 条目将有一个 IP 地址,该地址指向托管基础设施中的某种代理,该代理将实施各种安全功能,然后将请求路由到您的服务器在其网络上的实际私有 IP 地址。如果您使用的不是没有其他租户的专用服务器,那么可能还会分配自定义端口供您使用,以便共享服务器的私有 IP 地址。 在这种类型的托管基础设施中,无法直接从 Internet 访问您的服务器,并且您的服务器具有私有 IP 地址。从 Internet 访问您的服务器的唯一方法是通过托管服务提供商基础架构中的其他服务器(通常是代理),并且该服务器具有公共 IP 地址。 【参考方案1】:通过在您的服务器根目录创建robots.txt
来防止索引。见https://***.com/a/390379/11191351
【讨论】:
谢谢,这也很有用,但我的问题是如何防止使用 Express 直接访问我的 IP 如果你在node.js前面使用另一个webserver(如apache或nginx),那么将服务器绑定到127.0.0.1
或::1
并配置一个请求转发到node.js。如果你只是使用 node.js,它应该可以工作,如果你绑定到你的应用程序的主机名,也就是你的服务器的域名。这将需要您在/etc/hosts
中输入一个带有主机名的条目(我认为)。【参考方案2】:
您可以实现一个应用程序级中间件,该中间件检查请求主机名是否是您的域之外的任何其他内容。这样一来,使用 IP 地址访问您就不会导致处理(在应用程序级别)。
const SITE_ADDRESS = 'yourwebsite.com';
app.use((req,res,next) =>
if (req.hostname.includes(SITE_ADDRESS))
next();
else
res.status(403).end(`Access with $req.hostname is restricted. Use $SITE_ADDRESS instead.`);
);
【讨论】:
以上是关于如何防止直接访问 IP Express node.js的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 express 框架通过 node.js 获取远程客户端的本地 IP 地址?
如何从部署在 AWS Elastic beanstalk 上的 node.js express 应用程序获取客户端 IP?
在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解