【问题标题】:Is it not possible to set document.domain to herokuapp.com? How?不能将 document.domain 设置为 herokuapp.com 吗?如何?
【发布时间】:2016-07-19 00:09:23
【问题描述】:

问题

document.domain = 'herokuapp.com' 对于在#{some_app}.herokuapp.com 运行的暂存应用程序会出现以下控制台错误:

Uncaught SecurityError: Failed to set the 'domain' property on 'Document': 'herokuapp.com' is a top-level domain.

调查

通过尝试将域设置为页面的 TLD,我可以在任何页面上触发此错误。例如,现在拉开控制台并尝试运行document.domain = 'com'

您不希望文档的域成为 TLD,因为这将允许来自同一 TLD 的任何脚本与其通信。从那里推断很明显,任何 Heroku 应用程序都可以与域为 herokuapp.com 的应用程序通信,因为它们都在 herokuapp.com 的子域上运行。对于没有在一天结束时严格禁用暂存应用程序的任何人来说,这可能是一个安全问题。

从我的观察来看,Heroku 似乎谨慎地通过禁止将 herokuapp.com 设置为他们的页面域来保护他们的客户。他们是怎么做到的?我认为可以安全地假设浏览器知道在所有 TLD 上出错,但不知何故 herokuapp.com 被浏览器注册为 TLD 并触发相同的错误。我检查了响应头,到目前为止还没有找到任何东西。

工作环境

很抱歉,如果您来这里寻找解决方案。到目前为止,我只找到了更多信息,但想把这个问题放在一起,以便为其他人提供一些可谷歌搜索的东西。我正在使用下面的一些潜在解决方法。

  1. 使用其他东西进行暂存
  2. 避免 Heroku 上的子域和 Heroku 上的域设置
  3. 为暂存设置子域并将其指向 Heroku 以解决此问题

相关

我还发布了这个关于首先设置域的问题 (DRY way for setting document.domain from Rails)。我很想知道是否有更好的解决方案。

【问题讨论】:

    标签: javascript heroku cross-domain


    【解决方案1】:

    虽然document.domain 没有具体说明,但this article from Heroku 解释了它的工作原理和原因。

    tl;博士

    为什么:这很危险。

    如何:herokuapp.com 被 Mozilla 基金会的 Public Suffix List 收录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2016-06-12
      • 2011-08-11
      相关资源
      最近更新 更多