返回概览 更多文章

网站能看到你切屏、复制或截图吗?

可疑
试试看:切换标签页,再复制一句话

下面的一切都发生在你自己的浏览器里,此刻就在进行。你可以切换标签页、选中并复制一句话,或者把本页打开两次。没有任何内容会离开你的设备。

页面记录的最新事件

  • 暂无

页面会收到通知的事件

  • 切换标签页或最小化窗口 等待中
    切换到另一个标签页,再切回来
  • 窗口失去焦点 等待中
    点进另一个应用或窗口
  • 光标离开了页面 等待中
    把指针移出窗口
  • 选中了文字 等待中
    选中本页上的任意文字
  • 复制或剪切 等待中
    对选中的文字按 Ctrl+C 或 Cmd+C
  • 粘贴 等待中
    往下面的输入框里粘贴点东西
  • 打印对话框 等待中
    按 Ctrl+P,然后取消
  • PrintScreen 键 等待中
    按 PrintScreen 键(Windows 键盘)
  • 本站的其他标签页 等待中
    在第二个标签页里打开本页

键入: 0 · 粘贴: 0

没有任何事件会上报的内容

  • 用系统工具截图 看不到
  • 录屏 看不到
  • 你其他标签页的网址和标题 看不到
  • 你切换到了哪个应用 看不到

事件只在内存中计数,关闭标签页后就消失。粘贴的文字只显示给你自己看。

能,网站看得到你切换标签页,也看得到你复制和粘贴。不能,它看不到截图、录屏,也看不到你其他标签页里有什么。这两个答案都是真的,所以关于这个话题的每个论坛帖子里,总有一条信誓旦旦的最高赞回复,紧跟着另一条同样信誓旦旦、说法却完全相反的回复。

本页上的小工具就是一个能用的切屏检测器,想在你自己的浏览器上把这场争论一次说清,这是最快的办法。切到另一个标签页,选中并复制一句话,按 Ctrl+P 再取消,然后看看它都记下了什么。

一句话总结:页面会被告知它被隐藏或失去焦点,会被告知你选中、复制、剪切、粘贴或打印,也会被告知你的光标离开了窗口。截图、录屏、你还开着哪些其他网站、你切换到了哪个应用,这些它一概不知道。当某样东西看起来像是抓到了截图,那它读到的其实是一次按键或一次焦点变化,要不然它根本就不是网页。

网站能知道你切换了标签页吗?

能。页面被隐藏或重新显示时,浏览器会触发 visibilitychange 事件,并让 document.visibilityState 在 visible 和 hidden 之间切换。窗口失去焦点时,还会另外在 window 上触发 blur 事件。两者都带时间戳,所以页面知道你离开了,也知道离开了多久。统计脚本就靠这个:一个被隐藏的标签页可能再也不会回来,所以那一刻它们会用 navigator.sendBeacon 把收集到的数据发出去。测验平台用的是同样的信号。在开启了测验日志审计的 Classic Quizzes 中,Canvas 会记录学生的测验页面何时失去焦点、何时重新获得焦点。

页面拿不到的是你的去向。在小工具里切走再切回来,日志只会显示你离开了多久,别的什么都没有。这两个事件衡量的也不是同一件事:

四种“离开页面”的方式
  • 切换到另一个标签页
    标签页隐藏: 会上报 失去焦点: 会上报
  • 最小化窗口
    标签页隐藏: 会上报 失去焦点: 会上报
  • 点进另一个应用,浏览器仍留在屏幕上
    标签页隐藏: 无反应 失去焦点: 会上报
  • 拿起手机
    标签页隐藏: 无反应 失去焦点: 无反应
“标签页隐藏”和“失去焦点”是两个独立的信号,所以页面分得清标签页被隐藏和窗口只是失去了焦点(在 Mac 上,浏览器被其他窗口完全盖住时也可能算作隐藏)。页面永远不知道你去了哪里,更看不到你的手机。

点进某个聊天窗口而浏览器仍留在屏幕上时,只有 blur 会触发,因为标签页依然可见。切换标签页时则两者都会触发。网站就是这样分辨“标签页被隐藏”和“窗口只是失去了焦点”的。光标的移动则是另一个事件:指针移出窗口时会触发 mouseleave,挽留弹窗就靠它在你伸手去点标签栏时拦住你。

机器人往往表现出相反的规律。自动化浏览器经常根本收不到焦点事件,或者报告页面始终处于聚焦状态,我们首页的实时行为监测面板跟踪的正是这种规律。这类信号可以纳入行为评分的权重,也就是你总是碰到的那些验证码背后的同一套评分。

网站能看到你的其他标签页吗?

只能看到它自己的标签页。页面无法列出你的标签页,读不到它们的标题或网址,也看不进它们的内部。同源策略把各个网站彼此隔开,也没有任何 Web API 能枚举标签页。页面能做的,是通过 BroadcastChannel 或 storage 事件,与同一浏览器配置文件里同源的其他标签页通信。应用就是这样发现你把它打开了两次,并问你保留哪一个的。把本页在第二个标签页里再打开一次,“本站的其他标签页”那一行就会把它数进去。

页面能了解到的、关于你此前浏览行为的唯一一件事,是你从哪里来。如果你是点链接过来的,document.referrer 会说出那个链接所在的网站,通常也只有网站名,而不是完整地址。

网站能看到你复制和粘贴的内容吗?

能,但有限度。你按下 Ctrl+C 或使用菜单时,document 上会触发 copy 和 cut 事件,处理函数能准确读到你选中了什么。它还能把别的文字替换进去,这就是有些网站会在你复制的所有内容后面追加“阅读更多……”的做法,一份没人要的“贴心”。你拖选文字的过程中会触发 selectionchange,所以页面在你复制之前就已经知道你选中了什么。

粘贴则是反过来的。往页面里粘贴会触发 paste 并交出剪贴板里的文字,而 beforeinput 会报告文字是键入的还是粘贴的,所以表单能看出你那 400 字的答案是一次性整块贴进来的。页面做不到的,是翻看你的剪贴板。navigator.clipboard.readText() 需要你的授权,并且要求页面正被你使用,所以你在其他应用里复制的文字,在你把它粘贴到某处之前都是私密的。

人们问得最多的,是从 ChatGPT 粘贴过来的文字。页面能看到发生了一次粘贴,以及进来了多少文字。它不会被告知你是从哪个应用或网站复制的,不过富文本格式有时会露出一些线索。

网站能知道你截图或录屏吗?

不能。没有任何浏览器 API 会报告截图或屏幕录制。截图是由操作系统在浏览器之外完成的,不会有任何东西发给页面,无论用的是 OBS、截图工具,还是手机的侧边按键。看起来像截图检测的东西,其实是另外三种情况之一,而最后一种根本不是检测:

  • 监听 PrintScreen 的键盘监听器。小工具演示了其中的古怪之处:在 Windows 上,页面通常只能收到按键松开。在 Mac 上,系统会吞掉 Cmd+Shift+4 快捷键,所以页面永远看不到完整的按键过程。
  • beforeprint 监听器。它会在 Ctrl+P 和“另存为 PDF”时触发,所以页面确实能察觉这类副本。
  • 截图被拦截。流媒体服务的截图里经常是一块黑色矩形,因为视频走的是受保护的通道。这是阻止了捕获,而不是检测到了它。我们的 Widevine DRM 一文讲了这些保护等级是怎么回事。

在手机上,浏览器事件是一样的:切换应用或锁屏时,页面会被隐藏。“网站知道你截了图”这种看法,很可能来自原生应用。iOS 会通知应用你截了屏,Android 从 14 版起也有了面向应用的官方截图回调,聊天应用正是这样告诉对方的。而手机浏览器里的网页,什么都不会被告知。

Canvas 或在线考试能看到你切屏吗?

它能看到失去焦点这件事,带着时间戳,并向老师显示你离开过。但它看不到你去了哪里。对于以网页形式运行的测验,机制就这么多,这也是报告里往往只写“离开了页面”、没有更具体内容的原因。

有监考的考试用的是另一类软件,关于它们“什么都能看到”的说法也在这里最为强硬:

谁能看到什么
  • 你切换了标签页或窗口
    网页: 能扩展程序: 能原生应用: 部分
  • 你还开着哪些其他网站
    网页: 不能扩展程序: 能原生应用: 部分
  • 你的剪贴板里有什么
    网页: 部分扩展程序: 能原生应用: 能
  • 你截了屏
    网页: 不能扩展程序: 不能原生应用: 部分
  • 你正在录屏
    网页: 不能扩展程序: 不能原生应用: 部分
考试软件和某些应用能看到更多,因为它们不是网页:它们运行时拿到的权限,浏览器从不会交给网站。“部分”表示有附带条件。网页读取剪贴板需要弹出授权提示,原生应用能看到窗口变化但看不到浏览器里的标签页,手机会把截图通知给应用,而桌面系统大多不会。

Respondus LockDown Browser 是安装在电脑上的程序,Proctorio 则是一个有权读取你标签页的浏览器扩展。它们都不受网页能力的约束。如果一场考试似乎比网页知道得更多,请看看它要求你安装了什么。

能阻止网站看到这些吗?

不弄坏页面就做不到,而且常见的变通办法本身就会留下痕迹。伪造这些事件的工具,靠的是替换 document.hidden 的 getter 这类浏览器内置属性和方法,而被替换过的内置接口会暴露自己,方式与机器人检测中隐身补丁暴露自己如出一辙。所以现实的建议很简短:

  1. 默认页面看得到焦点、可见性和剪贴板事件。 不要去压制它们。真实用户产生的也是同样的事件,伪造它们本身就是破绽。
  2. 往网站里粘贴之前,先清空剪贴板。粘贴会把整段剪贴板文字交给页面,所以如果你一分钟前复制过密码或助记词,先随便复制点无害的东西把它盖掉。
  3. 把切换标签页只当作薄弱的证据。它只说明你看向了别处,而这是人们一天到晚都在做的事。因此而扣分的测验或考试网站,是在猜测你的意图。

如果你运营多个账号,一整天都在切换窗口,每个配置文件里的页面都会记录下每一次切换。这没有问题。真正让账号被标记的,是别处的自相矛盾,比如一个配置文件的语言、时钟和 GPU 互相对不上。Incogniton 给每个配置文件配上各自一致的浏览器,这样你的窗口切换看上去就只是再普通不过的日常噪声。平台是否允许多账号,由它自己的规则决定,所以动手之前先弄清楚。

想看看页面还能不经询问就读到哪些东西?完整的浏览器扫描涵盖了网络、硬件和指纹这几个方面。

Incogniton 徽标

提升你的隐私保护

箭头