从家庭网络上的 grunt Web 服务器限制 http:// 连接到远程托管 Web 服务器的正确 CORS 条目是啥?

Posted

技术标签:

【中文标题】从家庭网络上的 grunt Web 服务器限制 http:// 连接到远程托管 Web 服务器的正确 CORS 条目是啥?【英文标题】:What is the correct CORS entry for limiting an http:// connection to a remote, hosted web server from a grunt web server on a home network?从家庭网络上的 grunt Web 服务器限制 http:// 连接到远程托管 Web 服务器的正确 CORS 条目是什么? 【发布时间】:2015-10-17 02:30:27 【问题描述】:

我已经设置了一个通过 REST API 响应的远程托管 javascript 服务器 (DreamFactory Server http://www.dreamfactory.com/)。

在本地,我通过 grunt web 服务器通过 $grunt serve 运行 Angularjs 应用程序 https://www.npmjs.com/package/grunt-serve

我在远程服务器上设置了 CORS,以允许多个 http:// 连接类型使用“*”。这工作正常。

我的问题是如何将 CORS 配置限制为仅允许来自我家的 grunt Web 服务器的连接?

我尝试为“localhost”、“127.0.0.1”创建一个条目,这也是我从 whatismyip.com 报告的家庭 Internet IP,这是我的提供商在我 ping 它时为我的家庭 IP 列出的 dns 条目,我为我的家庭互联网 IP 创建的 dyndns 条目...它们都不起作用,除了 '*'(它允许任何站点连接)。

我认为了解 CORS 条目应该是什么样子以仅允许来自我的家庭网络服务器的连接对我来说是一个教育问题。

这可能吗?如果是这样,我应该检查什么以及在哪里检查才能在 CORS 配置中找到要清除的正确条目?

-布赖恩

【问题讨论】:

开始阅读文档的好地方developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 您可以在请求中加入某种Auth 标头,并且仅在该auth 标头存在时才提供cors 标头 感谢您的链接。我真的不需要添加任何 Auth 标头,DreamFactory 环境可以本地执行此操作(并且我正在使用它们)。我认为这可能与请求传输的原始值有关。从上面的链接:“请注意,现在除了foo.example(由请求中的ORIGIN:标头标识)之外的任何域都不能以跨站点方式访问资源。Access-Control-Allow-Origin标头应包含在请求的 Origin 标头中发送的值。" 【参考方案1】:

要工作并实际应用限制,请求连接的客户端必须支持并强制执行 CORS。以一种奇怪的方式(从安全的角度来看),使用 CORS 限制访问需要一个自我监管的客户端(遵循规定的访问规则的客户端)。这适用于现代浏览器,因为它们都遵循规则,因此它通常适用于通过浏览器提供服务的应用程序。

但是,CORS 访问限制不会阻止其他类型的客户端(例如任何语言的任何随机脚本)访问您的 API。

换句话说,CORS 实际上是关于由本地浏览器强制执行的网页访问规则。听起来您的 grunt/angular 代码不一定是实现和强制执行 CORS 的东西。


如果您确实想阻止其他系统访问您的 DreamFactory Server,那么您需要在 API 服务器本身中实现一些服务器端访问限制。

如果您只有一个客户端访问它并且该客户端正在使用不公开的“受保护”代码,那么您可以只实施密码或某种登录凭据,而您的一个客户端将是唯一拥有登录凭据。

如果访问始终来自一个特定的固定 IP 地址,您可以拒绝来自不在您维护的配置文件中的任何 IP 地址在您的服务器上的连接。

【讨论】:

谢谢。我认为您可能是正确的,因为 grunt/angular 开发网络服务器是问题所在。奇怪的是,通过清除 DreamFactory 服务器上的“*”条目,我可以在没有任何 CORS 问题的情况下进行连接。但是,如果我尝试指定域,那么它将不起作用。我认为这可能只是找到要列出的正确域或 IP 地址的问题。但是,它可能无法在具有正确配置的非生产服务器上工作?【参考方案2】:

您无法使用 CORS 保护 API,因为您需要在服务器上实施身份验证方案。基本上有 4 个步骤可以做到这一点。

    使用一些额外的访问控制语句更新您的服务器发送的标头。 告诉 Angular 允许跨域请求。 在来自 Angular 的 API 调用中传递凭据。 在您的 Web 服务器或 API 代码中实施 HTTP 身份验证方案。

Georgi Naumov 的这篇文章是查找 Angular 和 php 实现细节的好地方。 AngularJS $http, CORS and http authentication

【讨论】:

这是一个很好的观点。不过,我并没有尝试使用 CORS 对其进行身份验证……只是为了允许远程 Web 服务器(在这种情况下为我的本地 grunt 服务器)连接到它。一旦可以连接,我就可以运行 DreamFactory 中内置的身份验证方案。如果我在远程 DreamFactory 服务器的 CORS 配置上清除 *,这一切都有效。如果我尝试清除除“*”之外的任何其他内容,则它不起作用。我认为可能有一个特定的条目可以为我的 grunt 服务器从家里访问清除它?

以上是关于从家庭网络上的 grunt Web 服务器限制 http:// 连接到远程托管 Web 服务器的正确 CORS 条目是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 10家庭版也能共享打印机(中)解除Guest账户网络登录限制,实现局域网共享

如何实现流媒体引擎,以便家庭网络上的树莓派视频流可以公开

无法从本地网络上的 Web 服务器访问 localhost

运行 grunt 和 tomcat 服务器的 Web 应用程序(Spring、Angular、Grunt、Maven、Tomcat)

如何从本地网络访问运行在 WSL(Linux 的 Windows 子系统)上的 Web 服务器

无法从连接到 Azure *** 的本地计算机(在家庭网络上)访问专用 AKS 群集