Snapdrop 安全与隐私完整分析:为什么不用数据库、文件如何端到端加密传输 Snapdrop 安全与隐私完整分析为什么不用数据库、文件如何端到端加密传输【免费下载链接】snapdropA Progressive Web App for local file sharing项目地址: https://gitcode.com/gh_mirrors/sn/snapdropSnapdrop 是一款开源的本地文件共享工具Progressive Web App灵感来自 Apple AirDrop让你在同一局域网内通过浏览器即可互传文件。它的核心安全设计可以概括为一句话服务器只做传话的从不碰你的文件——没有数据库、不存储任何文件并借助 WebRTC 对传输内容加密。本文将从源码层面拆解 Snapdrop 的安全架构帮你搞懂它为什么敢于宣称零文件留存。Snapdrop 是什么架构速览Snapdrop 的工作方式非常简单手机和电脑访问同一个网址部署在你自己的内网或公网服务器上两台设备在对方页面中出现气泡点一下气泡选择文件文件就直接从一台设备传到另一台整个系统只有两部分浏览器前端纯 HTML5/ES6 实现位于 client/ 目录NodeJS 后端只有 server/index.js 一个文件负责 WebSocket 信令转发官方对隐私问题的回答也值得一读见 docs/faq.md 中的What about privacy?章节。为什么不用数据库这是 Snapdrop 安全模型中最漂亮的一笔整个服务端没有引用任何数据库。打开 server/index.js 可以看到SnapdropServer在构造函数中只创建了一个 WebSocket 服务器和一个内存对象this._rooms {};this._rooms就是全部状态——一个按 IP 地址分组的房间字典纯内存、不落盘。它的作用只是记录哪些设备在同一个网络里server/index.js 中的_joinRoom方法当有新设备加入时通知其他设备peer-joined消息这意味着✅服务器无法保存你的文件——因为它连写文件的代码都没有 ✅进程一停所有信息即刻消失——没有历史、没有缓存、没有日志文件 ✅攻击面极小——没有 SQL 注入、没有凭据泄露、没有备份文件作为对比很多网盘/传输类工具需要数据库存储用户账号、文件索引和上传记录而 Snapdrop 的无状态设计从根上消除了文件被留存的可能。文件如何端到端加密传输正常模式WebRTC 直连P2P只要两台设备的浏览器支持 WebRTC目前 Chrome、Edge、Safari、Firefox 都支持文件就完全绕开服务器在设备之间直接传输。核心代码在 client/scripts/network.js 中RTCPeer类network.js负责建立 WebRTC 连接通过createDataChannel创建可靠的数据通道network.js文件被FileChunker切分为 64KB 的小块经数据通道逐块发送network.js加密发生在哪一层WebRTC 数据通道在底层使用DTLS-SRTP 协议连接建立时两台设备会自动完成密钥协商——这就是端到端加密的来源。传输途中的每一个字节都是密文任何中间节点包括服务器即使抓到数据也只是一堆乱码。服务器在这里的角色仅仅是信令服务器Signaling Server转发 SDP Offer/Answer 和 ICE 候选帮助两台设备找到彼此。信令内容只包含连接协商元数据不含任何文件内容。这一机制在 docs/faq.md 中有明确说明it is only used to establish a connection and is not involved in the file transfer。降级模式WebSocket 中继如果某台设备不支持 WebRTC老浏览器系统会降级为WSPeer模式network.js文件分块经服务器 WebSocket 中继转发。此时服务端在技术上能接触到数据流所以自建部署时务必启用 HTTPS/WSS下面会讲。服务器能看到什么看不到什么数据WebRTC 直连模式降级中继模式你的 IP 地址可见用于分组可见设备型号/系统/浏览器可见来自 User-Agent可见在线状态、设备数可见可见传输的文件名/大小❌ 看不到可见文件内容❌完全看不到端到端加密可见留存任何文件❌ 永不存储❌ 永不存储即使最保守地评估降级模式Snapdrop 依然做到了传输即结束文件只流经内存从不写入磁盘。自建部署的安全细节如果你想把 Snapdrop 部署在自己家里或公司内网Docker 一键完成参考 docs/local-dev.md 和 docker-compose.yml有几个安全要点TLS 证书自动生成docker/openssl/create.sh 会在容器启动时用自签 CA 生成证书让 WSS/PWA 功能正常工作反向代理配置docker/nginx/default.conf 将/server路径代理到 Node 服务并正确转发X-Forwarded-For头设备隔离靠 IP 分组服务器按 IP 划分房间server/index.js同一网络外的用户互相看不到部署时需注意代理必须设置X-Forwarded-For头否则经代理访问的所有客户端会被分进同一个房间而互相可见——这一点在 docs/local-dev.md 的 Deployment Notes 中有专门提醒。小结Snapdrop 的隐私设计哲学无数据库全部状态在内存中进程即销毁 P2P 优先文件经 WebRTC 数据通道端到端加密直连服务器仅做信令 无账号体系不收集任何个人信息无注册、无登录 开源可审计整个服务端不足 300 行代码server/index.js任何人都能轻松读完并验证对于如何在同一局域网内安全地传文件这个单一场景Snapdrop 用做减法的方式给出了教科书级的答案功能越少需要信任的组件就越少隐私风险也就越低。【免费下载链接】snapdropA Progressive Web App for local file sharing项目地址: https://gitcode.com/gh_mirrors/sn/snapdrop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考