crossorigin匿名无法加载图像的问题

Nie*_*sol 11 html javascript image cross-domain cors

参考:阻止HTTP基本身份验证显示图像提示

为了保护我的用户生成的内容免受这种潜在的"利用",我添加crossorigin="anonymous"到所有[img]BBCode.

嗯,它在IE11中工作:当我测试漏洞利用时,图像不再触发验证对话框(已禁用缓存和不同的URL进行测试以获得良好的衡量标准).

但在Chrome中,漏洞利用不起作用......因为图像根本没有被加载.相反,我得到了明显相当常见的错误:

来自"XXXXX"的图像已被跨源资源共享策略阻止加载:请求的资源上没有"Access-Control-Allow-Origin"标头.因此不允许原点'YYYYY'进入.

也许我的理解是错误的,但我认为"anonymous"属性的价值可以让它发挥作用.

我错过了什么,如果有的话还有什么其他选择可以防止这个问题?

boz*_*mob 13

首先,根据我的理解,你的意思是说图像没有在IE中加载.哪个是完美的!这就是它必须如何工作.

其次(最后),Chrome的行为也很完美.

流程/详细信息:

服务器不向原始站点提供凭据(通过将Access-Control-Allow-Origin设置为匿名),图像将受到污染并且其使用受到限制.

现在,如果您有一个跨原始图像,您可以将其复制到画布中,但这会"污染"画布,这会阻止您阅读它(因此您无法"窃取"或"下载"图像).但是,通过使用CORS,存储图像的服务器可以告诉浏览器允许跨源访问,因此您可以通过画布访问图像数据.

当标头不是来自同一个源时,即,如果在没有CORS请求的情况下获取资源(即没有发送Origin:HTTP标头),并且当它变为无效时,则处理它就好像使用了枚举关键字anonymous一样.

所以我的猜测是null无论是不存在还是无效,在这种情况下它会像匿名一样处理.

所以,你看到Chrome中的错误意味着正在做IE正在做的事情.


一些可以帮助的参考资料 -

虽然不是直接的答案,但是,有用的链接 -

希望能帮助到你!:)快乐的编码!

  • bozzmob好解释!并且@NiettheDarkAbsol,是的,如果您不发送访问控制标题,chrome将阻止所有图像,因为如果用户请求是真的,chrome将无法相信.这就是访问控制机制的工作原理. (2认同)