由于 WebGL 提供的低级访问权限,它是否是一个潜在的安全问题?
例如,一个网页可以尝试编译和运行它想要的任何着色器源。
似乎安全性尤其会成为开源 Web 浏览器的一个问题,因为攻击者可以更容易地发现实现中的漏洞。
由于 WebGL 提供的低级访问权限,它是否是一个潜在的安全问题?
例如,一个网页可以尝试编译和运行它想要的任何着色器源。
似乎安全性尤其会成为开源 Web 浏览器的一个问题,因为攻击者可以更容易地发现实现中的漏洞。
是的,WebGL 确实是一个潜在的安全风险,尽管风险的严重程度难以评估和公开辩论。这里有一些棘手的问题。浏览器已经针对安全风险采取了一些防御措施,但从长远来看,这些防御措施是否足够,似乎存在一些争议。
一个主要风险是 WebGL 涉及直接在视频卡上运行代码,并公开提供对视频卡 API 的直接访问的 API。浏览器确实会尝试将此代码沙箱化(在一定程度上),并且浏览器确实会实施一些旨在防止恶意行为的安全限制。然而,许多这些 API 及其实现最初并不是为提供给不受信任的实体而设计的(它们只能由完全受信任的本地应用程序使用),因此人们担心将它们暴露给任意网站是否可能会启用网站攻击你的系统。
有一份高知名度的白皮书(另见续集)研究了当时浏览器中 WebGL 实现的安全性,并发现了许多漏洞。他们在几个 WebGL API 中发现了一些内存安全问题,并且还发现了一些允许一个网站读取其他网站的像素数据的攻击(这可能会破坏机密性)。另请参阅第三项研究,该研究表明(当时)在许多浏览器和网络卡上存在这些漏洞。
浏览器对此采取了多种防御措施:它们将存在已知安全问题的视频卡列入黑名单;他们试图修复已知的内存安全问题;他们根据同源策略限制了 WebGL 的使用,以防止恶意网站使用 WebGL 监视用户对其他网站的使用。
关于这些防御措施从长远来看是否足够,目前存在一些争论。微软的立场是WebGL 的安全风险太大,现有的防御措施不够强大。另一方面,Mozilla 认为他们已经采取的防御措施是足够的,并且 WebGL 为网络提供了重要的价值。Ars Technica对这个问题进行了很好的总结;这是另一篇新闻报道。
PS 我完全不同意你关于开源 Web 浏览器特别有问题的说法。那是一个神话。请参阅Open Source vs Closed Source Systems,其中已经涵盖了这些论点。(另请参阅Chrome 与资源管理器 - 如何用简单的语言解释开源更好?有关此主题的更多深思熟虑的讨论。)
一些关键点:
似乎安全性尤其会成为开源 Web 浏览器的一个问题。
你先生大错特错。已经多次证明,开源程序通常比闭源程序安全得多,因为检查代码的眼睛要多得多。
此外,所有浏览器都在沙箱中运行这些东西。突破沙盒将是困难的,但在封闭源代码中和在开源浏览器中一样,这将是一个很大的问题。
让我们将 WebGL 与 javascript 进行比较。
(着色器代码通过)WebGL 和 javascript 之间的关键区别在于着色器代码运行在 GPU 卡上,而 javascript 运行在 CPU 上。
代码是否被解释或编译无关紧要;由此产生的潜在漏洞仍然存在。
因此,javascript 具有更大的滥用能力,因为一旦流氓脚本突破浏览器监狱,它基本上就可以访问您的 PC。一个流氓 WebGL 着色器脚本可以访问你的 GPU。
有一些因素使这个简单的观点变得复杂。javascript 已经存在了一段时间,因此受到了更多的审查并关闭了更多的漏洞。javascript要复杂得多。Javascript 作为一种语言要复杂得多。等等等等