ngrok安全可靠吗?是否存在被攻击的风险?

79

ngrok是一个安全的工具吗?我正在阅读一篇教程,建议使用ngrok测试我对需要连接到我的端点的外部服务做出的API响应。

8个回答

44

考虑到它在2014年作为开源项目启动,因此版本2.0没有可用的源代码。 我对任何从云端打开到我的本地主机的隧道的代码心存疑虑。 特别是没有源代码的情况下,这是相当可怕的东西!


32
它会打开一条到您的开发机器的隧道,部分由难以猜测的子域名保护,并可以通过要求密码进一步加强安全性。但是,您仍然向ngrok本身敞开了大门,而该公司是完全不透明的(没有地址、员工、商业名称、LinkedIn存在;我所能找到的只是它有1-10名员工,是私人的;甚至不确定它位于哪个国家)。除此之外,代码也没有公开。没有理由认为它们不合法,但是可用于建立信任的信息很少。
您可能可以通过加密流量来使用ngrok和其他本地隧道服务,从而提高安全性。有关更多信息,请参见https://security.stackexchange.com/questions/177280/end-to-end-encryption-for-localtunnel-ngrok-setup/177357#177357

2
看起来他们现在在领英上:https://www.linkedin.com/company/ngrok/people/ - IllusionVK
这并不完全正确。ngrok已经开源了相当长的一段时间:https://github.com/inconshreveable/ngrok - dio
@dio -- ngrok曾经是开源的,直到1.7.1版本(2015年8月)基于https://github.com/inconshreveable/ngrok/tags ...请参见上面的评论:https://dev59.com/tloV5IYBdhLWcg3wN8dD#46386973 - Luke
1
我在ngrok工作。自从这个答案首次发布以来,我们已经有了很大的发展,包括成功融资系列A,现在是一家真正拥有员工的公司。我们的平台和ngrok代理仍然是封闭源代码,但我们已经开始构建开放源代码的代理库,包括GoRustJS,您可以在您的应用程序中使用。 - Russ Savage
@RussSavage 你是什么原因决定闭源呢?这对我来说看起来非常可疑... - undefined
@leetbacoon 好问题。这个决定是在我加入ngrok之前很久就做出的。我们的创始人之前做了一个Changelog podcast(大约在50分钟的时候开始),其中提到了一些关于他的动机的细节,我认为这些动机似乎非常真诚。当然,我们也有数据处理协议可供参考,而且ngrok的付费版本还支持端到端的流量加密。 - undefined

24

只要您将其用于测试而不是用于持久性的事物,它就是安全的。 - Mohd Abdul Mujib
21
所以这是安全的,因为Atlassian不在意?开个玩笑吧 :) - cool breeze
3
这是一篇关于ngrok开源的文章,发布于2015年。 - hussachai
事实和观点并不是同一回事。你在引用观点。安全不能基于观点。事实是,从互联网客户端到您的PC上的服务器没有端到端加密。有些人建议在所有这些之上添加额外的加密隧道,但这实际上忽略了ngrok的简单性质。最好使用socat来建立隧道,即使通过公司http代理也可以。 - Jérôme Radix

11
如果有人担心破坏他们的开发环境,可以使用Docker。有许多ngrok / docker项目,但这是我选择的一个:https://github.com/gtriggiano/ngrok-tunnel 对于macOS,请使用“TARGET_HOST = docker.for.mac.localhost”。

2
ngrok有一个官方的Docker镜像,他们发布在这里:https://hub.docker.com/r/ngrok/ngrok - Russ Savage
1
在Docker中运行ngrok仍然存在二进制文件的安全问题,只是在Docker中。对我来说,最大的担忧是将未加密的流量交给匿名的第三方,这将在Docker容器内或外发生。我想二进制文件可能更难从Docker容器中看到主机上的内容,但用户已经可以使用工具观察二进制文件读取本地文件、扫描局域网端口等。二进制文件只会掩盖这样的活动,而不会完全隐藏它。 - Synthead

6
他们现在提供了一项服务,您只需本地运行ssh,无需在您的计算机上运行他们的任何代码。
您可以运行类似于“ssh -R 80:localhost:8501 tunnel.us.ngrok.com http”的命令。这将连接到他们的主机之一,并将其收到的连接转发回您的计算机和localhost:8501上运行的服务。
这对我来说似乎很安全,唯一的问题是您不知道他们收集了哪些信息和谁正在连接您暴露的服务。他们打印所有的连接,但是这是由他们的二进制文件完成的,有人可能会在您没有注意到的情况下倾听。您可以在您的端点检查连接,但是您不能确定是谁在连接。

唯一的问题是你不知道他们收集了什么信息,以及谁连接到了你的暴露服务:这是可怕的部分。用户必须百分之百信任ngrok。即使他们正在做正确的事情,如果他们被攻击了怎么办?将流量交给第三方始终存在风险,在权衡隐私风险时应该认真考虑。 - Synthead

-1

我遇到了类似的问题,并找到了两个解决方案,可以直接在浏览器中查看应用程序。

ngrok http 8080 --host-header="localhost:8080"
ngrok http --host-header=rewrite 8080

显然,将8080替换为您正在运行的任何端口

当我在嵌入页面中使用此解决方案并从React应用程序中提取bundle.js时,仍会引发错误。 我认为由于它在嵌入式页面中重写标题为localhost时,它正在寻找localhost,而应用程序不再在其上运行。


1
问题关乎安全性,而非如何使用。 - Dave Newton

-2

它打开了一条通往您的开发机器的隧道,部分由模糊性(难以猜测的子域)保护,并且可以通过要求密码进一步保护。但是,您仍然向ngrok本身敞开了大门,而该公司完全不透明(没有地址,没有员工,没有商业名称,没有LinkedIn存在;我能找到的只是它有1-10名员工并且是私人的;甚至不确定它所在的国家)。除此之外,代码也没有开源。没有理由认为它们不合法,但是没有太多信息可用于建立信任。


3
似乎这只是重复了Luke在2020年8月21日的回答:请至少注意如何引用第三方材料 - greybeard

-3
Ngrok是一种方便且高度安全的实用程序,可通过反向代理创建到本地托管应用程序的隧道。这是一种将本地托管应用程序发布到Web的实用程序。简而言之,任何本地托管的应用程序都可以提供公共可访问的Web URL。无论是基于Spring Boot或Nodejs的Web应用程序,还是聊天应用程序的Webhook等。

2
这是ChatGPT生成的答案吗? - Yani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接