Hacker News 中文摘要

RSS订阅

CodePen 2.0 被指输入时即向服务器传数据 -- Apparently CodePen 2.0 sends data to their servers as you type

有人确信代码笔(CodePen)2.0 一直自动保存,因此觉得输入时数据发往服务器合理,并假定代码终会送至后端。另有回复确认此行为用于自动保存与渲染,提醒在其中键入或粘贴的任何密钥均视为已泄露。还有人虽不解为何在默认公开的该平台粘贴密钥,但称约十年前便似乎自动保存或传代码到后端。

正文

我基本肯定它一直都有自动保存,所以这在我看来并不奇怪?我一直默认它会把数据发到自己的后端,你写出来的代码反正最后也要到那边去。

Image 1

对,那是为了自动保存和渲染预览用的。重点是:任何在 CodePen 里输入或粘贴的密钥,都应该当作已经泄露。

我不明白为什么会有人把密钥输入或粘贴到 CodePen 里——它默认是公开的……不过“自动保存 / 把代码发到后端”这件事,好像大约十年前就一直是这样的吧?

Shopify 也这么干。你在 Shopify 网店上买商品时,只要输入了邮箱,哪怕后来取消订单、关掉标签页,邮箱也会被存下来。有时你会收到营销邮件,或者“我们注意到你还没完成购买”之类的东西。真的很有侵扰性。只有在你输入邮箱时勾选了“给我发营销邮件”的框,他们才能发这种邮件。不过这是个 dark pattern。但就算我没同意、甚至明确取消勾选,公司也从没停止给我发营销垃圾邮件;没有一家公司因此被追责,将来大概也不会有,所以它们继续发。

HotJar 之类的服务也很流行,会记录你的鼠标移动和点击,再叠加到应用上播放,基本等于给你使用过程“录屏”。对,但 CodePen 面向的是前端开发者。开发者更可能不小心泄露密钥,因为他们手上真有密钥。

拿“只是自动保存”来辩护很有意思。自动保存真的需要按键级的数据吗?

CodePen 的服务条款和隐私政策里都没提这件事,只有 Builds 文档写了:“当你在 CodePen 上工作时,你的 Pen 会持续经过 CodePen 编译器。”看起来 v1 把数据发到 codepen.io、cpwebassets.codepen.io 和 cdpn.io,v2 则发到 codepen.dev。

去看看 FullStory 吧,很多大型网站都在用:它基本等于实时看用户浏览器画面,能看到鼠标移到哪儿、输入多快、每个字符怎么敲。我以前工作的公司做电话客服时,会看着用户屏幕,在对方用我们 app 时轻声提示怎么操作。我们从不说自己在看;不过用户往往说不清自己在做什么,所以 FullStory 是很好的客服工具。我上一份工作也很需要这种东西——我们经常得靠日志和分析数据拼出用户是怎么触发某个问题的。Elastic 和 Splunk 也有类似功能。我不知道三者对比起来如何,只知道它们能追踪 DOM 事件,然后重放成操作视频。

发到服务器是为了渲染预览窗。这和你在浏览器里粘贴密钥没有区别。等你发现电脑上复制内容也可能通过 Wi-Fi/蓝牙发到别的设备共享,恐怕更惊讶。对,是为了渲染,也为了保存当前工作。不过如果你没保存 Pen 就退出或崩溃,未保存的内容本来就没法恢复。这功能是为了恢复未保存改动。我不评价好坏,但从 UX 看,浏览器崩溃时不丢十分钟工作还是挺好。就算有自动保存,Pen 也得至少手动保存过一次,用户才真正受益。

为什么边输入边发?大概因为自动补全逻辑就是这样,前端没法替你猜语言并给出补全。其实也有例外:如果整个语言的 VM 和你的代码在同一个标签页里跑,而且全是 JS,完全有可能在客户端本地“猜语言和自动补全”。大概更难,也不一定对所有人同样好用,但并非不可能。这么做的缺点是要把自动补全数据和模型权重都加载到客户端,页面可能受 CPU 或内存限制。不知道你说的“模型权重”指什么;但这个取舍确实存在。所有 JavaScript API 的完整自动补全数据,用高效格式存的话,大概连 1MB 都用不到。

评论

评论区分成两个阵营:多数人觉得 CodePen 把内容实时发给服务端只是在线编辑器的常规操作,和浏览器里粘贴任何秘密没有本质区别;少数人则把焦点从「会上传」转向「逐键上传」,认为自动保存并不能解释这种粒度,而且披露不够透明。

击键上传是 CodePen 这类工具的常规代价

  • 有人指出代码补全、预览窗格这类功能本来就需要服务端参与,输入框为各种 UX 功能上传内容并不稀奇。(较多人)
  • 也有人觉得自动保存一直存在,代码终归会放进 CodePen 后端,因此用户不该到现在才感到意外。(较多人) > 自动保存一直开启,所以我向来都认为它会把数据发给服务端——代码最后本来就会放在那里(@giancarlostoro)

自动保存解释不了逐键上传

  • 如果只是防止浏览器崩溃丢失内容,定时或失焦时保存就够了;逐键回传更像是在采集输入习惯,而不是单纯为了用户体验。(少数人) > 拿「只是自动保存」来辩护挺有意思:自动保存真的需要精确到每一次击键吗?(@quietraster)
  • CodePen 在服务条款和隐私政策里没有正面写清这件事,只在 Builds 文档中顺带提到用户创作会不断经过 CodePen Compiler;普通用户很难意识到输入是实时的。

有价值的补充

  • 这类逐字可见的能力不是 CodePen 独有:FullStory 一类会话录制工具可以在网页上回放鼠标轨迹和逐字输入,甚至有公司做电话客服时一边静默观看用户屏幕一边给提示。它说明问题早已超出单个在线编辑器。
  • 想绕开这类问题,纯客户端方案一直存在:htmledit.squarefree.com 多年全在本地运行;也有人自建了把预览内容塞进 URL hash 的 HTML playground,用于分享单页 HTML。
  • r/webdev 上已有同一话题的实验性讨论:有人故意在在线编辑器里埋假 API key,再看这些 key 会被发送到哪些服务器。