如何绕过一个本地文件到另一个本地文件的原始策略违规?

时间:2009-06-24 20:18:18

标签: javascript security html5 canvas same-origin-policy

我正在尝试使用未托管在服务器上的文件半重新创建Mozilla demo对JavaScript + <video> + <canvas>的使用。

加载我的文档会导致错误控制台报告此错误:

  

错误:未捕获异常:[例外...“安全错误”代码:“1000”nsresult:“0x805303e8(NS_ERROR_DOM_SECURITY_ERR)”位置:“file:/// media / disk / javascript / html5 / chromakey / chromakey1。 htm线:23“]

这是第23行:

this.referenceImageData = this.bCtx.getImageData(0, 0, this.bufferCanvas.width, this.bufferCanvas.height);

它试图从画布中获取图像数据,我之前复制过这样的视频帧:

this.bCtx.drawImage(this.inputElement,
    0, 0,
    this.inputElement.width, this.inputElement.height,
    0, 0,
    this.bufferCanvas.width, this.bufferCanvas.height
);

this.inputElement引用此(相当无聊)元素:

<video id="MainInput" src="320x240.ogg" width="320" height="240"></video>

如果没有使用JAR签名我的代码,有没有办法解决这个错误?

我认为这与Firefox的相同原始政策(https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript)有本地文件访问权限有关,但我无法弄清楚从哪里去。

3 个答案:

答案 0 :(得分:4)

从文件系统中,每个文件都有不同的来源(这可以防止访问例如/etc/passwd -let,例如使用XMLHttpRequestiframe,然后将数据传递到某个服务器上加载<img>时使用查询字符串的Web或通过javascript自动发送表单的Web)。请参阅http://tools.ietf.org/html/draft-abarth-origin(它谈到“实现定义的值”,最简单的是每个文件具有不同的来源)

解决问题的最简单方法是运行HTTP服务器。

可能有一个使用Firefox's "per-file permission"的解决方案,但我不确定它是否真的值得,因为运行本地HTTP服务器有多便宜......(YMMV)

答案 1 :(得分:1)

您需要从同一个来源访问该文件,我认为file://协议由于明显的安全原因而受到严格限制。

只有扩展程序可以访问这些文件,并具有更多权限。

答案 2 :(得分:0)

Firefox的文件访问原始策略可以在&#34; about:config&#34;中更改。 要在文件上删除相同的原始策略:URI,请更改&#34; true&#34;的价值 security.fileuri.strict_origin_policy为false。Mozilla;about:config;origin_policy setting