什么是文件 URI 的同源策略?

Dr.*_*ain 5 javascript cross-domain

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

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

Bra*_*nan 6

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

W3C的CORS规范得到它从IETF的“原产地”的定义RFC 6454“网络起源观”。在第 4 节“URI 的来源”中,它写道:

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

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

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