是否无法将document.domain设置为herokuapp.com?如何?

时间:2016-03-30 19:37:13

标签: javascript heroku cors cross-domain

问题

对于在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并触发相同的错误。我检查了响应标题,到目前为止还没有找到任何内容。

解决方法

很抱歉,如果你来这里寻找解决方案。到目前为止我只找到了更多的信息,但是想把这个问题放在一起,为其他人提供一些Googlable。我正在使用下面的一些潜在工作。

  1. 使用其他东西进行分段
  2. 避免使用Heroku上的子域和Heroku上的域设置
  3. 设置子网站进行暂存,并将其指向Heroku以解决此问题
  4. 相关

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

1 个答案:

答案 0 :(得分:1)

.is-dropdown-submenu-parent.is-down-arrow>a:before没有明确解决this article from Heroku解释了这是如何工作的原因。

TL;博士

为什么:这很危险。

如何:herokuapp.com包含在Mozilla Foundation的Public Suffix List