用于限制从家庭网络上的 grunt Web 服务器到远程托管 Web 服务器的 http:// 连接的正确 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?
我设置了一个远程托管 javascript 服务器 (DreamFactory Server http://www.dreamfactory.com/),它通过 REST API 响应。
在本地,我是 运行 一个 Angularjs 应用程序,通过 grunt web 服务器通过 $grunt serve
https://www.npmjs.com/package/grunt-serve
我在远程服务器上设置了 CORS 以允许 '*' 用于多个 http:// 连接类型。这工作正常。
我的问题是如何将 CORS 配置限制为仅允许来自我家 grunt web 服务器的连接?
我已尝试为 "localhost"、“127.0.0.1”创建一个条目,还有从 whatismyip.com 报告的我的家庭互联网 IP,我的提供商为我列出的 dns 条目当我 ping 它时家庭 IP,我为我的家庭互联网 IP 创建的 dyndns 条目... None 它们中的工作,除了'*'(它允许任何站点连接)。
我认为了解 CORS 条目应该是什么样子以仅允许来自我的家庭 Web 服务器的连接对我来说是一个教育问题。
这可能吗?如果是这样,我应该检查什么以及在哪里检查以便找到要在 CORS 配置中清除的正确条目?
-布莱恩
要工作并实际应用限制,请求连接的客户端必须支持并强制执行 CORS。以一种奇怪的方式(从安全的角度来看),使用 CORS 限制访问需要一个自我监管的客户端(一个遵循规定的访问规则的客户端)。这适用于现代浏览器,因为它们都遵循规则,因此它通常适用于通过浏览器提供服务的应用程序。
但是,CORS 访问限制不会阻止其他类型的客户端(例如任何语言的任何随机脚本)访问您的 API。
换句话说,CORS 实际上是关于由本地浏览器强制执行的网页的访问规则。听起来您的 grunt/angular 代码不一定会实施和强制执行 CORS。
如果您真的想阻止其他系统访问您的 DreamFactory 服务器,那么您需要在 API 服务器本身中实施一些服务器端访问限制。
如果您只有一个客户端访问它并且该客户端使用的 "protected" 代码不是 public,那么您可以只实施密码或某种登录凭据和您的一个客户端将是唯一拥有登录凭据的客户端。
如果访问始终来自一个特定的固定 IP 地址,您可以拒绝来自任何不在您维护的配置文件中的 IP 地址的服务器连接。
您无法使用 CORS 保护 API,因为您需要在服务器上实施身份验证方案。基本上有 4 个步骤可以做到这一点。
- 使用一些额外的 Access-control 语句更新您的服务器发送的 headers。
- 告诉 Angular 允许 cross-domain 个请求。
- 在来自 Angular 的 API 调用中传递凭据。
- 在您的网络服务器或您的 API 代码中实施 HTTP 身份验证方案。
Georgi Naumov 的 post 是在 Angular 和 PHP 中查找实现细节的好地方。
AngularJS $http, CORS and http authentication
我设置了一个远程托管 javascript 服务器 (DreamFactory Server http://www.dreamfactory.com/),它通过 REST API 响应。
在本地,我是 运行 一个 Angularjs 应用程序,通过 grunt web 服务器通过 $grunt serve https://www.npmjs.com/package/grunt-serve
我在远程服务器上设置了 CORS 以允许 '*' 用于多个 http:// 连接类型。这工作正常。
我的问题是如何将 CORS 配置限制为仅允许来自我家 grunt web 服务器的连接?
我已尝试为 "localhost"、“127.0.0.1”创建一个条目,还有从 whatismyip.com 报告的我的家庭互联网 IP,我的提供商为我列出的 dns 条目当我 ping 它时家庭 IP,我为我的家庭互联网 IP 创建的 dyndns 条目... None 它们中的工作,除了'*'(它允许任何站点连接)。
我认为了解 CORS 条目应该是什么样子以仅允许来自我的家庭 Web 服务器的连接对我来说是一个教育问题。
这可能吗?如果是这样,我应该检查什么以及在哪里检查以便找到要在 CORS 配置中清除的正确条目?
-布莱恩
要工作并实际应用限制,请求连接的客户端必须支持并强制执行 CORS。以一种奇怪的方式(从安全的角度来看),使用 CORS 限制访问需要一个自我监管的客户端(一个遵循规定的访问规则的客户端)。这适用于现代浏览器,因为它们都遵循规则,因此它通常适用于通过浏览器提供服务的应用程序。
但是,CORS 访问限制不会阻止其他类型的客户端(例如任何语言的任何随机脚本)访问您的 API。
换句话说,CORS 实际上是关于由本地浏览器强制执行的网页的访问规则。听起来您的 grunt/angular 代码不一定会实施和强制执行 CORS。
如果您真的想阻止其他系统访问您的 DreamFactory 服务器,那么您需要在 API 服务器本身中实施一些服务器端访问限制。
如果您只有一个客户端访问它并且该客户端使用的 "protected" 代码不是 public,那么您可以只实施密码或某种登录凭据和您的一个客户端将是唯一拥有登录凭据的客户端。
如果访问始终来自一个特定的固定 IP 地址,您可以拒绝来自任何不在您维护的配置文件中的 IP 地址的服务器连接。
您无法使用 CORS 保护 API,因为您需要在服务器上实施身份验证方案。基本上有 4 个步骤可以做到这一点。
- 使用一些额外的 Access-control 语句更新您的服务器发送的 headers。
- 告诉 Angular 允许 cross-domain 个请求。
- 在来自 Angular 的 API 调用中传递凭据。
- 在您的网络服务器或您的 API 代码中实施 HTTP 身份验证方案。
Georgi Naumov 的 post 是在 Angular 和 PHP 中查找实现细节的好地方。 AngularJS $http, CORS and http authentication