交叉原点属性的用途.



在图像和脚本标记中。

我的理解是,您可以访问其他域上的脚本和图像。那么什么时候使用这个属性呢?

这是你想限制其他人访问你的脚本和图像的能力吗?

图片:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-交叉原点

脚本:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

可以在规范中找到答案。

对于img:

crossorigin属性是CORS设置属性。其目的是允许来自允许跨来源访问的第三方网站的图像与canvas一起使用。

对于script:

crossorigin属性是CORS设置属性。对于从其他来源获得的脚本,它控制是否会暴露错误信息。

这就是我们在script标签中成功使用crossorigin属性的方式:

我们遇到的问题:我们试图使用window.onerror 在服务器中记录js错误

我们记录的几乎所有错误都有这样的消息:Script error.,我们得到的关于如何解决这些js错误的信息很少。

原来chrome中的原生实现报告错误

if (securityOrigin()->canRequest(targetUrl)) {
        message = errorMessage;
        line = lineNumber;
        sourceName = sourceURL;
} else {
        message = "Script error.";
        sourceName = String();
        line = 0;
}

如果请求的静态资产违反了浏览器的同源策略,则将message作为Script error.发送。

在我们的案例中,我们是从cdn服务静态资产。

我们解决它的方法是将crossorigin属性添加到script标记中。

p.S.从这个答案中得到了所有信息

启用CORS的图像可以在元素中重复使用而不会受到污染。允许的值为:

该页面已经回答了您的问题。

如果你有一个跨来源的图像,你可以将其复制到画布中,但这会"污染"画布,从而阻止你阅读它(因此你不能"窃取"图像,例如从网站本身无法访问的intranet中)。然而,通过使用CORS,存储图像的服务器可以告诉浏览器允许跨原点访问,因此您可以通过画布访问图像数据。

MDN还有一个关于这件事的页面:https://developer.mozilla.org/en-US/docs/HTML/CORS_Enabled_Image

这是你想限制其他人访问你的脚本和图像的能力吗?

没有。

如果您正在本地开发一段快速代码,并且您正在使用Chrome,则会出现问题。如果您的页面使用表单的URL加载"file://xxxx",则尝试在画布上使用getImageData()将失败,并引发跨源安全错误,即使您的图像是从本地计算机上与呈现画布的HTML页面相同的目录中提取的

文件://D:/wwwwroot/mydir/mytestpage.html

并且您的Javascript文件和图像正在从中提取,例如:

文件://D:/wwwwroot/mydir/mycode.js

文件://D:/wwwwroot/mydir/myImage.png

然后,尽管这些辅助实体是从同一个来源提取的,但仍然会引发安全错误。

出于某种原因,Chrome没有正确设置原点,而是将必需实体的原点属性设置为"null",从而无法通过在浏览器中打开HTML页面并在本地调试来测试涉及getImageData()的代码。

同样,由于同样的原因,将图像的crossOrigin属性设置为"匿名"也不起作用。

我仍在努力寻找解决方法,但浏览器实现者似乎再次让本地调试变得尽可能痛苦。

我只是试着在Firefox中运行我的代码,通过识别我的图像与HTML和JS脚本来自同一个来源,Firefox做得很好。因此,我很欢迎关于如何在Chrome中解决这个问题的一些提示,因为目前,当Firefox工作时,它的调试器非常缓慢,甚至离拒绝服务攻击只有一步之遥。

我已经找到了如何说服Google Chrome允许file://references而不引发跨源错误。

步骤1:在其他操作系统中创建快捷方式(Windows)或等效快捷方式;

步骤2:将目标设置为类似以下内容:

"C:\Program Files(x86)\Google\Chrome\Application\Chrome.exe"--允许从文件访问文件

这个特殊的命令行参数--allow-file-access-from-files,告诉Chrome允许您使用对网页、图像等的file://references,而不会在每次尝试将这些图像传输到HTML画布时抛出交叉原点错误。它适用于我的Windows7设置,但值得一试,看看它是否也适用于Windows8/10和各种Linux发行版。如果是这样,问题就解决了——离线开发恢复正常。

现在,如果我试图将图像数据传输到画布或将JSON数据传输到表单元素,我可以引用file://URI中的图像和JSON数据,而不会出现Chrome引发的跨源错误。

  1. 默认情况下,脚本不受same-origin policy的约束,它可以从任何跨源域加载第三方JavaScript。

  2. 此类规则具有明显的安全风险,例如:

  • 第三方JavaScript可以访问第一方网站的错误上下文,从而获取内部信息
  • 第三方JavaScript源服务器可以通过请求时的SSL握手验证、cookie等方式获取用户信息
  1. 为了降低这些安全风险,浏览器为脚本标记引入了crossorigin属性
  • 如果没有crossorigin属性,就不可能获得JavaScript的错误上下文
  • crossorigin设置为"anonymous"允许访问JavaScript的错误上下文,但在请求期间SSL握手中不携带cookie或用户凭据
  • crossorigin设置为"use-credentials"允许访问JavaScript的错误上下文,并在请求期间在SSL握手中携带cookie或用户凭据

此外,在2023年左右,Chrome浏览器的HTTP缓存也会受到crossorigin属性的影响,详细信息请参阅缓存控制头不起作用。

相关内容

  • 没有找到相关文章

最新更新