一位开发者上个月想快速画个数据库结构图,结果连开三块白板工具都要求先登录。他索性自己写了一个,并决定让“不上传”不再只是隐私政策里的一句空话,因为隐私政策无法验证。这个名为 board.jamuny.com 的绘图工具,从浏览器层面彻底禁止了所有网络连接。 根据页面返回的响应头,站点启用了严格的 Content Security Policy(CSP): `Content-Security-Policy: default-src 'self'; script-src 'self'; img-src 'self' blob: data:; font-src 'self'; connect-src 'none'; object-src 'none'; form-action 'none'; frame-ancestors 'none'` 其中 `connect-src 'none'` 会在浏览器级别封锁 fetch、XMLHttpRequest、WebSocket、EventSource 和 sendBeacon。即使开发者半年后在代码里不小心粘贴进一段统计脚本,它也不会在网站上悄悄运行——浏览器会直接拒绝建立连接,并在控制台留下一条违规日志。 用户在约30秒内即可验证这一点:打开开发者工具、随便画几个图形,然后观察 Network 面板始终是空的。开发者还写了一个 Playwright 自动化测试,一旦有任何外部请求出现就会失败。测试模拟了绘制、切换画板、重新加载以及导出PNG和SVG等操作,并断言除应用自身资源外没有任何请求。 不过作者提醒,`page.on('request')` 事件不会捕获 WebSocket 握手。如果只监听 request,那么一个真实的 WebSocket 连接会被直接漏掉。测试必须同时加上 `page.on('websocket')` 才能确保万无一失。 最明显的代价是:这个白板没有协作功能,作者也明确表示不会添加。实时协作需要服务器,而服务器意味着笔画数据会离开用户设备——那就成了他最初极力想避免的东西。于是这个零上传白板,也就成了一次对现代 Web 应用默认行为的反抗。
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.