这是对我的先例问题之一的重新表述:我的先例问题之一
出于安全原因,浏览器将在使用来自其他域的图像后限制画布上某些功能的使用。
这是什么安全原因?画布中的图像显示如何存在风险?
我为此写了一篇名为“了解 HTML5 画布图像安全规则”的帖子
简短的版本是,如果允许画布将本地文件绘制到自身,那么它可能会绘制位于本地驱动器(对您私有)或仅对您可见的私有站点(internal.myWebsite.com
)上的文件,获取其 imageData,然后将该文件上传到服务器,有效地窃取图像。我们不能这样,所以“本地文件和跨域文件破坏原始干净”规则已经到位。
如果您拥有一个网站并希望能够以跨源方式使用图像,则需要启用 CORS。
这是一个疯狂的例子,但希望你明白:
假设您有一个在线购物网站,在用户个人资料页面中,您展示了一张漂亮的信用卡图片(创建的画布),上面有信用卡的最后四个数字,当用户点击它时,他们可以更改他们的信用卡详细信息(号码、日期等)。没关系。
现在想象一下,通过任何方式,例如 XSS 漏洞或 sql 注入或其他任何方式,破解者都可以更改加载画布图像的链接,使其指向攻击者服务器中的画布图像。
破解者发送的画布图像与原始网站相同,但末尾有不同的最后四个数字,以及一个链接,上面写着“如果这不是您的信用卡,请单击此处进行更改”。
当用户点击该链接进入破解者的钓鱼网页时,该网页会重新同步原始的“更改卡数据详细信息”页面,但当用户输入他的信用卡详细信息时,它们将被保存在攻击者服务器上,然后重定向回原始页面网站。