Javascript crossorigin anonymous无法加载图像时出现问题
参考: 为了保护我的用户生成的内容免受这种潜在的“攻击”,我在所有Javascript crossorigin anonymous无法加载图像时出现问题,javascript,html,image,cors,cross-domain,Javascript,Html,Image,Cors,Cross Domain,参考: 为了保护我的用户生成的内容免受这种潜在的“攻击”,我在所有[img]bbcode中添加了crossorigin=“anonymous” 嗯,它在IE11中起作用了:当我测试该漏洞时,该图像不再触发身份验证对话框(测试时禁用缓存,并使用不同的URL进行测量) 但是在Chrome中,这个漏洞不起作用。。。因为根本没有加载图像。相反,我得到了一个显然相当常见的错误: 源“XXXXX”的映像已被跨源资源共享策略阻止加载:请求的资源上不存在“访问控制允许源”标头。因此,不允许访问源“yyyy” 也
[img]
bbcode中添加了crossorigin=“anonymous”
嗯,它在IE11中起作用了:当我测试该漏洞时,该图像不再触发身份验证对话框(测试时禁用缓存,并使用不同的URL进行测量)
但是在Chrome中,这个漏洞不起作用。。。因为根本没有加载图像。相反,我得到了一个显然相当常见的错误:
源“XXXXX”的映像已被跨源资源共享策略阻止加载:请求的资源上不存在“访问控制允许源”标头。因此,不允许访问源“yyyy”
也许我的理解是错误的,但我认为属性的“anonymous”
值允许这样做
我是否遗漏了什么,如果是,还有什么其他选项可以防止这个问题呢?首先,据我理解,你的意思是图像没有加载到IE中。这太完美了!这就是它的工作原理 其次(&最后),铬的性能也是完美的 过程/细节: 服务器不向源站点提供凭据(通过将“访问控制允许源站点”设置为“匿名”),映像将受到污染,其使用受到限制 现在,如果你有一张图片,你可以把它复制到画布上,但是这会“污染”画布,阻止你阅读它(因此你不能“窃取”或“下载”图片)。但是,通过使用CORS,存储图像的服务器可以告诉浏览器允许跨源访问,因此您可以通过画布访问图像数据 当标头不是来自同一来源时,即,如果在没有CORS请求的情况下提取资源(即,没有发送来源:HTTP标头),并且当标头变为无效时,将对其进行处理,就像使用枚举关键字anonymous一样 因此,我猜测null要么与不存在相同,要么与无效相同,在这种情况下,它的处理方式类似于匿名 因此,您可以看到,Chrome中的错误意味着完全按照IE的方式操作。
一些有帮助的参考资料-
参考: CORS设置属性: 在HTML5中,一些支持COR的HTML元素,如
img
或video
,具有交叉原点属性(交叉原点属性),
这使您可以为元素的获取配置CORS请求
数据。默认情况下(即未指定属性时),CORS
根本不用。“匿名”关键字意味着将有 不通过cookie、客户端SSL交换用户凭据 证书或HTTP身份验证 由于您链接到的图像未启用CORS,因此您将获得
Access Control Allow Origin
error
要解决此问题,不仅需要发送crossOrigin属性,还需要发送正确的头。您可以将其设置为crossOrigin to
use credentials
,这将设置凭据请求头-服务器可以使用该头来决定您是否拥有对内容的权限。当CORS头从服务器发送回一个图像,并且该图像在画布上使用时,origin clean标志为true。我最近遇到的主要问题不是“hack”失败,而是Chrome完全阻止了所有图像,因为它们没有访问控制头。删除crossorigin=“anonymous”
属性会使图像再次工作,但会将漏洞还原为黑客攻击。是的。我不确定我是否不能清楚地沟通,但是,你所说的是预期的行为。博兹莫博很好的解释!还有@NiettheDarkAbsol,是的,如果你不发送访问控制头,chrome将阻止所有图像,因为chrome无法相信用户的请求是否真实。这就是访问控制机制的工作原理。对,好吧,那么问题就变成了:我如何在不完全阻止图像的情况下防止“黑客”攻击?据我所知,我认为这是不可能的。如果您传递了正确的标题,则图像将可见,如果使其匿名,则图像不可见或将抛出CORS错误。看一下-once:)对我来说,我的问题是我的crossOrigin
不小心被拼写成了全小写crossOrigin
。