Javascript 使用canvas.toDataURL有哪些安全问题?

Javascript 使用canvas.toDataURL有哪些安全问题?,javascript,html,security,canvas,Javascript,Html,Security,Canvas,canvas.toDataURL通常会生成哪些安全线程?我们必须采取什么措施使我们的网站安全无线程地使用it 在下面的链接中,有关于安全错误的讨论。如果映像不是本地托管的,toDataURL会引发安全错误,但这是为什么 您可能知道同一原产地政策。本质上,它是浏览器使用的一种安全机制,用于确保只有来自用户访问的同一站点的脚本才可以不受限制地运行和访问DOM 您可以将脚本伪装为图像,例如,您可以将脚本中的每组4个字符存储在一个像素中(每个通道一个字节),然后读取该图像的像素以重建脚本 这就是为什么

canvas.toDataURL通常会生成哪些安全线程?我们必须采取什么措施使我们的网站安全无线程地使用it

在下面的链接中,有关于安全错误的讨论。如果映像不是本地托管的,toDataURL会引发安全错误,但这是为什么


您可能知道同一原产地政策。本质上,它是浏览器使用的一种安全机制,用于确保只有来自用户访问的同一站点的脚本才可以不受限制地运行和访问DOM

您可以将脚本伪装为图像,例如,您可以将脚本中的每组4个字符存储在一个像素中(每个通道一个字节),然后读取该图像的像素以重建脚本

这就是为什么相同来源的策略也适用于图像:如果您将不同域的图像绘制到网页上的画布中,那么如果您将跨来源的图像绘制到画布中,您可以对画布执行的操作是有限制的。例如,不能检查其像素


现在想象一下,您可以使用canvas.toDataURL()从跨源画布生成数据url。虽然浏览器知道画布包含跨源内容,但数据URL只是一个URL。因此,没有确定的方法知道它以某种方式起源于另一个域,并且它可能被用来绕过整个相同的起源。例如,您可以创建一个新的img并将数据URL用作其src。

“仅允许来自用户访问的同一站点的脚本运行”不,您可以公平地运行来自其他站点的脚本,将“运行”替换为“无限制运行并访问DOM”但是从其他来源加载的脚本可以完全访问加载它的页面。否则,从外部CDNno加载jquery是没有用的。不,您可以从CDN加载jquery,然后在与页面位于同一域的脚本中使用它来更改DOM。不能运行从不同来源更改DOM的脚本(除非显式设置CORS)