【问题标题】:What is the Same-Origin Policy for File URIs?什么是文件 URI 的同源策略?
【发布时间】:2018-06-27 00:58:56
【问题描述】:

也许我的 Google-Fu 已经抛弃了我,但我找不到关于 this outdated Mozilla page 以外的文件 URI 的同源策略的良好描述。谁能指出我对文件 URI 的同源策略的解释?特别是,如果我从(比如说)file:///C:/Users/Joe/Test/test.html 加载了一个脚本,那么该脚本允许使用 XMLHttpRequest 访问哪些文件?我应该如何指定 URI,即相对于脚本的 URI?

请注意,我并不是在寻求绕过跨域限制的方法,只是了解我需要将资源驻留在哪里,以便在不触发跨域错误的情况下加载它们。

【问题讨论】:

  • 你想看看CORS
  • file:/// uri 在不同浏览器中的“同源策略”的工作方式不同 - chrome 有一个命令行标志可以使它们“同源”(至少在 Firefox 中) - 其他浏览器不值得谈论:p
  • @JaromandaX +1 给你的评论,但具有讽刺意味的是,其他浏览器不值得讨论,特别是 IE 和 Edge,恰好是最容易使用的对于这样的开发场景。它们都可以在 file:/// 和 CORS 组合中顺利工作,无需任何命令行标志或任何其他步骤。
  • 这就是为什么他们不值得谈论@RacilHilan - 因为他们工作:p
  • 我认为有一个不太危险的标志,--allow-file-access-from-files

标签: javascript cross-domain


【解决方案1】:

file:/// URI 的同源策略取决于实现。

W3C's CORS spec 的“起源”定义来自 IETF RFC 6454 "The Web Origin Concept"。在section 4 "Origin of a URI" 中写道:

  1. 如果 uri-scheme 是“文件”,则实现可以返回实现定义的值。

注意:历史上,用户代理已经从 文件方案大量的特权。然而, 授予所有本地文件如此广泛的权限可能会导致 权限提升攻击。一些用户代理已经 成功授予本地文件基于目录的权限,但是 这种方法尚未被广泛采用。其他用户代理 为每个文件 URI 使用全局唯一标识符,即 最安全的选择。

查找特定浏览器的行为(及其背后的原因)并不容易。实际上,我认为您引用的旧 Mozilla wiki 页面是有关该主题的更好资源之一。 Here's a fairly helpful discussion;一般指导是假设浏览器可以将所有 file:/// URI 视为完全唯一的来源。

【讨论】:

猜你喜欢
  • 2011-10-08
  • 2010-12-22
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2011-01-17
相关资源
最近更新 更多