Firefox 跨域图像被污染

Posted

技术标签:

【中文标题】Firefox 跨域图像被污染【英文标题】:Firefox Cross Domain images are tainted 【发布时间】:2012-01-08 03:08:38 【问题描述】:

这在 Chrome 中有效,但在 Firefox 中无效。 Access-Control-Allow-Origin 设置为 *,并且加载图像时将 crossOrigin 设置为匿名,但是当在 Firefox 中将图像绘制到画布上时,它们会污染画布。加载图片的代码如下:

var image = new Image();
image.onload = loadCallback;
image.crossOrigin = "anonymous";
image.src = imageSrc;

几个问题:

    我是否缺少某些特定于 Firefox 的内容?它是否需要比 Access-Control-Allow-Origin 更多的标头? 有什么方法可以从加载的图像中确定它被污染(对调试很有用)。 服务器的域名是相同的,它们只是不同的子域(即 images.example.com 和 mysite.example.com),有什么方法可以利用这一点,或者我真的应该有代理吗准备好做一个 passthru 并且忘记处理 CORS 问题了吗?

【问题讨论】:

Firefox 的哪个版本?这已在最近的几个版本中进行了调整。 Firefox 8。我正在为未来构建一些东西,所以我想要在最新的 Firefox 上工作的答案。 【参考方案1】:

在 Firefox 9 中添加了在绘制启用 CORS 的图像时不污染画布的支持。请参阅 https://bugzilla.mozilla.org/show_bug.cgi?id=685518

因此,如果您使用 Firefox 8 进行测试,它将无法正常工作。试试 Firefox 9 测试版?

【讨论】:

这适用于 PNG 和 JPG,但不适用于 SVG 图像,它们仍然会污染画布。 (我相信是因为它们内部可以包含异物) @brettlaforge 在 Firefox 10 中确实如此,但在一年多前的 Firefox 11 中已修复。见bugzilla.mozilla.org/show_bug.cgi?id=672013。不过,WebKit 仍然存在类似的错误。

以上是关于Firefox 跨域图像被污染的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 图像,无法使用 html5 画布保存,出现受污染的画布错误

跨域请求在 Firefox 中被阻止

跨域请求仅在 Firefox 中被阻止! [选项:403 禁止]

被 CORS 图像污染的画布

被跨域数据污染的画布

如何修复 getImageData() 错误画布已被跨域数据污染?