先说结论
往网页里粘贴一段文字,后果可以和往它那儿上传一个文件一模一样重。感觉不像,是因为这个动作是从一个安全的地方借来的:在自己的两个窗口之间,粘贴把文字从一个你说了算的地方挪到另一个你说了算的地方。而在网页上,第二个地方是一个脚本读得到的文本框。接下去发生什么,全由页面决定,不由动作决定。
长成粘贴模样的工具,不少把活儿干在服务器上:页面把你的文字发出去,服务器格式化、校验或者对比,结果再送回来。屏幕上没有任何东西告诉你,你用的是哪一种。文本框长得一样,“格式化”按钮也长得一样。差别就是一次网络请求,不去找就看不见。
粘贴的东西究竟装着什么
落进在线工具的,很少是散文。那是某个人吃饭的家伙事儿,而且体裁很要命:计算机世界里最敏感的几类字符串,恰恰就是深更半夜被贴进格式化工具的那些。
- 配置文件的存在,就是为了装那些不能写死在程序里的东西。那些东西是数据库密码、API 密钥、签名密钥。整段贴进去的配置,把它们全捎上了。
- 日志和报错堆栈装着网址里的会话令牌、邮箱地址、内网机器名,偶尔还有一段带着谁的个人信息的请求内容。
- API 的响应是生产数据的快照。真实的客户,真实的余额,被贴到一个读起来顺手的地方。
- 一切长得像 base64 的东西,既然被贴进解码器,多半当初就是因为要紧才编码的:调试中的令牌,证书,认证头。
从陌生人服务器上过了一道的密钥,发现的那一刻就得按泄露算:吊销,重发。在生产系统上,这是谁都没排进日程的一个下午。要说的不是格式化网站在收割凭据,而是你无从知道一台服务器记了什么。一个你排除不了泄露可能的秘密,就是一个必须换掉的秘密。
这活儿根本不需要你的文字出门
一个技术事实就能把问题了结:格式化、校验、转换、对比文字,是计算机世界里最轻省的几样活儿。解析 JSON,给 XML 缩进,对比两个文件,编码 base64,浏览器几毫秒就做完,就在本地,而且多年前就做得到。服务器帮不上任何忙。一个粘贴模样的工具要是上传你的文字,那是架构的陈年旧习,或者是运营者图省事,绝不是活儿本身的需要。
这个站的文字工具就是反例。JSON 格式化工具解析、格式化并转换 JSON、XML、HTML、CSS 和 YAML;文本对比工具把两段文字的每一处差别逐行逐词标出来;Base64 编解码工具在文字和它的各种编码之间双向走。三个都在你的机器上跑,你粘贴的东西无处可去,这些页面里没有一条能把它发出去的代码路径。
其中两个已经有作伴的指南:不上传就格式化 JSON,还有对比两个 JSON 文件。
怎么看出你用的是哪一种
检查的办法和文件工具一样,全文写在上传那一页。按粘贴的口径说个短版:
- 拔网线。把页面打开,断网,粘贴,按按钮。本地工具接着干,服务器工具当场停。三十秒,不要任何本事,也做不了假。
- 按下“格式化”的同时盯住网络面板。那一刻发出去一条请求,大小和你粘贴的差不多,那就是你粘贴的东西在出门。没有请求,就没有上传。
- 提防热心的添头。“分享这段代码”的按钮、跨设备同步的粘贴历史、发给同事的链接,件件都得先把文字存上服务器才办得到。功能就是招供:能把你粘贴的东西亮给别人看的页面,就是把它留下了。
还有一个习惯,比三条检查都顶用:少贴。校验一份配置的格式,用不着真密码,"REDACTED" 解析出来一模一样。至于粘贴的东西本身就是秘密的那种情形,规矩缩成更短的一句:世上配收到密码的页面只有一个,就是那个密码所属的登录页。