为什么在JS中写入剪贴板被认为是一个安全漏洞



似乎目前没有纯JavaScript方法来访问系统剪贴板使用大多数现代浏览器,Internet Explorer是一个例外。在许多其他Stack Overflow问题上(例如,使用Javascript访问剪贴板- sans Flash?),它解释说这个限制是一个故意的安全措施,以防止网站从剪贴板读取密码或其他敏感数据。

虽然从剪贴板读取似乎是一个巨大的安全风险,但我不清楚为什么写入剪贴板会是一个巨大的安全风险。如果有的话,浏览器通过拒绝JS将数据复制到剪贴板的能力来防止什么情况?

写入剪贴板是恶意网站(或在网站内运行的其他代码,如基于flash的广告)欺骗用户传播恶意软件的一种方式。几年前,基于flash的广告将恶意软件URL复制到剪贴板上,希望用户在打算粘贴其他内容时将其粘贴,从而污染facebook帖子、论坛和电子邮件等内容。你粘贴的链接不是指向蒂莉阿姨的猫的照片,而是指向某个恶意软件的链接。典型的是"你感染了病毒,请支付50美元购买杀毒软件"的假杀毒骗局。我对此做了一些研究,因为我的许多ClipMate客户都在问为什么这些讨厌的url突然出现在ClipMate中。在研究的过程中,我被MSNBC和DIGG上基于flash的广告攻击了。剪贴板随后在Flash 10中被锁定。你可以在这里阅读更多关于我的故事:http://www.clipboardextender.com/defective-apps/clipboard-virus-not-exactly-but-still-dangerous

我希望JavaScript的限制是为了防止类似的事情发生。

如果用户不希望他或她的剪贴板被覆盖怎么办?

如果用户期望他们的剪贴板包含一个内容,但暗中它被另一个内容所取代,即使这是一个潜在的安全问题,而不仅仅是一个烦恼。

尽管不太可能是攻击媒介,但认为可能会想出一些涉及社会工程的东西:说服用户将秘密更改的信息粘贴到目标资源的密码字段中,这并非不合理。然后,该资源将由攻击者知道的密码来保护。

除了上述漏洞问题之外,至少有一种情况下,javascript剪贴板API的重要实现可能会引起一些安全问题。

现在我们有了新的api,可以在不调用服务器端的情况下在不同的窗口之间建立连接,比如postMessage, MessageChannel,或者最近引入Firefox的BroadcastChannel。这些api有不同级别的浏览器支持,但它们都在考虑跨域问题。也就是说,从不同主机上的窗口接收消息应该是不可能的,除非这个窗口实际上显式地允许它。

这对剪贴板API不起作用。想象一下,页面上的一些代码将代码粘贴到剪贴板上,这个剪贴板被另一个窗口扫描。这是一个非常奇怪和高度假设的场景,取决于一些非常奇怪和奇异的假设,但值得一提。

最新更新