【问题标题】:What are security concerns around use of canvas.toDataURL?使用 canvas.toDataURL 有哪些安全问题?
【发布时间】:2014-07-26 12:30:23
【问题描述】:

canvas.toDataURL 通常会生成哪些安全线程?我们必须采取哪些措施才能安全地使用它并免费连接到我们的网站?

在以下链接中,讨论了如果图像未在本地托管时 .toDataURL 引发的安全错误,但这是为什么呢?

canvas.toDataURL() causing a security error Capture HTML Canvas as gif/jpg/png/pdf?

【问题讨论】:

标签: javascript html security canvas


【解决方案1】:

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

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

这就是为什么同源策略也适用于图像的原因:如果您将来自不同域的图像绘制到网页上的画布中,如果您绘制了跨域,那么您可以使用画布执行的操作是有限的。将原始图像放入其中。例如,您无法检查其像素。

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

【讨论】:

  • "只允许运行来自用户访问的同一站点的脚本" 不,你可以运行来自其他来源的脚本<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  • 很公平,将“运行”替换为“无限制运行并访问 DOM”
  • 但是从其他来源加载的脚本可以完全访问加载它的页面。如果没有,从外部CDN加载jquery是没有用的
  • 不,您可以从 CDN 加载 jQuery,然后在与您的页面位于同一域的脚本中使用它来更改 DOM。您不能运行从不同来源更改 DOM 的脚本(除非您明确设置 CORS)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多