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。我正在使用下面的一些潜在工作。
我还发布了关于首先设置域名的问题(DRY way for setting document.domain from Rails)。我很想知道是否有更好的解决方案。
答案 0 :(得分:1)
.is-dropdown-submenu-parent.is-down-arrow>a:before
没有明确解决this article from Heroku解释了这是如何工作的原因。
为什么:这很危险。
如何:herokuapp.com包含在Mozilla Foundation的Public Suffix List
中