【问题标题】:Javascript security / cross scripting on same server同一台服务器上的 Javascript 安全/跨脚本
【发布时间】:2010-12-22 01:32:42
【问题描述】:

有一些我需要通过以下方式工作的 Javascript:

://localhost

://服务器名称

:/www.domainnamefortheserver.com

当我从http://servername 使用引用域的 IFRAME 运行脚本时 - 它不会加载。

有没有办法让 Javascript 安全模型将服务器名称、localhost 和域识别为同一个“域”?

谢谢

【问题讨论】:

  • 您使用的是绝对网址吗?

标签: javascript security cross-domain same-origin-policy


【解决方案1】:

如果您在 UNIX 上运行,您可以编辑 /etc/hosts 为您的服务器提供一个虚假的 DNS 条目。

例如。

127.0.0.1 localhost www.domainnamefortheserver.com

然后,即使它尚未在实时站点上,您也可以始终以正确的名称连接到它。不要尝试直接破坏 javascript 安全性。

这也适用于 OSX。我预计 Windows 的工作方式会有所不同。

【讨论】:

  • 在windows中也是一样的,你可以在你的hosts文件中添加一个入口——\Windows\system32\drivers\etc\
  • 谢谢。我怀疑我会在 18 个月后突然发现我在 Windows 上需要它时来寻找该评论!
  • 另外,以下关于使用相对路径的 cmets 很好,除非您受到某些将完整域放在任何地方的第三方软件的限制。
【解决方案2】:

如果您使用服务器端语言生成页面,您可以像这样设置安全域:

document.domain = $CURRENT_HOSTNAME;

所以安全域将是用户请求的域。这是在黑暗中拍摄的,但我希望它仍然有帮助。

【讨论】:

    【解决方案3】:

    使用根相对 URI:

    href="/foo/bar"
    

    而不是绝对 URI:

    href="http://example.com/foo/bar"
    

    这样文档将从相同的主机名加载。

    【讨论】:

      【解决方案4】:

      什么意思

      我的参考是域名

      ?

      如果您在http://servername 的页面中加载脚本(使用<script src=''>),他们将可以访问http://servername 上的所有内容,即使它们来自另一个域。

      但是,如果您尝试对其他域进行 AJAX 调用,那么您就会遇到问题。您可以使用 Christopher 解释的技巧,即为域设置别名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-21
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2020-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多