【发布时间】:2016-01-26 00:35:23
【问题描述】:
这是一个关于跨域 API 安全的问题。提出这个问题以便对其他人有用的最好方法是通过一个假设的例子。
- 域 APIHOST.COM 希望允许访问其资源到 FRIENDLYSITE1.COM 和 FRIENDLYSITE2.COM(但不允许其他域)
- FRIENDLYSITE 归他人所有,APIHOST 没有直接的服务器访问权限。他们可能正在运行任何服务器技术。他们愿意托管额外的内容,但不要太复杂。
当 Bob 使用他的网络浏览器访问 FRIENDLYSITE1.COM 时,他的 FRIENDLYSITE1.COM(或 APIHOST.COM)的凭据是不相关的。应在 APIHOST.COM 和 FRIENDLYSITE1.COM 之间处理安全问题。
我研究了所有跨域请求技术(CORS、iFrames、JSONP),但所有这些技术都假设安全性应该来自浏览器 Bob,而不是来自 Bob 正在访问的 FRIENDLYSITE1.COM 域.
有没有办法在不涉及 Bob 和他的浏览器的情况下,在两台服务器之间处理安全性的跨域 API 访问?
【问题讨论】:
-
您是否尝试允许从 FRIENDLYSITE1.COM 托管的网页中的 Javascript 访问 APIHOST.COM,或者您是否尝试在直接从 FRIENDLYSITE1.COM 的网站进行 API 调用时允许访问 APIHOST.COM服务器?这里有很大的不同。在一种情况下,该连接源自特定网页的用户浏览器。在另一种情况下,连接来自服务器的安全环境。
-
理想情况下,FRIENDLYSITE 无需更新其服务器上的任何内容。但是,用于验证 API 调用安全性的应该是 FRIENDLYSITE 的凭据。
-
FRIENDLYSITE 的凭据是什么? FRIENDLYSITE 的每个网络请求都不会发送“自动”凭据。您无法可靠地验证 Web 请求的来源。您需要与请求一起发送的实际秘密凭据才能对请求进行身份验证。您可以执行反向 DNS 来尝试确定请求是否来自 FRIENDLYSITE 拥有的 IP 地址,但从安全角度来看,这远非完美。
标签: javascript jquery iframe cors jsonp