VeilSwap
← 全部文章
基础设施2026-11-078 分钟阅读

洋葱镜像实测:同一个兑换站,少的 150 字节与五组响应头

八条路径各取两次(Tor 与明网):接口逐字节相同,HTML 恰好差 150 字节,五组安全响应头消失,两个统计脚本只有一个被关掉。

一个可以被测的承诺。 每个挂 .onion 镜像的隐私兑换站都在做同一个隐含声明:那是同一个站。营销页没法审计,这句话可以。2026-11-07 06:14–06:19 UTC,我把八条路径各取了两次——一次走 Tor 的 SOCKS5 端口、域名交给代理解析(`--socks5-hostname`,.onion 名字不经过本地解析器),一次直连明网域名——比较状态码、字节数、响应头与延迟。 (Tor 换币安全吗)

后端到字节都一样。 JSON 接口两边完全一致:`/api/currencies` 两侧都是 71,655 字节,1,000 USDT-TRC20 的报价两侧都是 181 字节,一个不存在的订单 UUID 两边都返回 21 字节的 404,`robots.txt` 525 字节、`sitemap.xml` 448,943 字节逐字节相同。这组数据里没有任何「另一次部署」或「旧副本」的痕迹:镜像是同一个 Next.js 源站换了一条发布路径——这本来就是镜像该有的样子,也正是为什么响应头的差异比内容的差异重要得多。 (XMR 换 USDT 退出路线)

那 150 字节差在哪。 三个 HTML 页面在洋葱侧都恰好小 150 字节:首页 72,531 对 72,681、`/exchange` 44,775 对 44,925、一篇博客 64,617 对 64,767。首页第一处分叉在第 49,874 字节,正是联系入口。明网给的是 `<a href="/cdn-cgi/l/email-protection#0e7d…">` 外加 `/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js`,洋葱给的是原样的 `mailto:[email protected]`。这是 Cloudflare 的邮箱混淆,150 字节全部来自它。换句话说,镜像才是没被改写过的源站,是两份拷贝里更诚实的那个。

五组响应头消失。 明网是 HTTP/2,带 `strict-transport-security: max-age=31536000; includeSubDomains; preload`、`x-frame-options: SAMEORIGIN`、`x-content-type-options: nosniff`、`referrer-policy: strict-origin-when-cross-origin`、`permissions-policy: camera=(), microphone=(), geolocation=()`,还有 `nel`、`report-to` 与 `cf-ray`。洋葱是 HTTP/1.1,只有 `content-type`、`vary`、`date`、`connection`——别的都没有。没有 frame 保护,页面就能被塞进 iframe;没有 nosniff,类型写错的响应可能被老浏览器当脚本执行;referrer 退回浏览器默认,从页面跳到第三方时可能送完整 URL 而不只是 origin。HSTS 在洋葱上确实没必要(443 端口直接拒绝 SOCKS5 连接,根本没有 TLS 可钉),但另外四组不是。

缓存、协议,以及源站真正发的东西。 明网 HTML 带 `cache-control: public, max-age=0, s-maxage=300, stale-while-revalidate=900`;洋葱在缓存命中时给同一行,冷请求时给 `private, no-cache, no-store`——没有 CDN 的 Next.js 源站本来就这样。`/api/*` 上的不对称更干净:明网 `no-store`,洋葱完全不给 cache-control。明网还多 `alt-svc: h3`(HTTP/3),镜像只有 HTTP/1.1。这些都不影响一次兑换;它们说明两份拷贝由不同层产生,而只有其中一层被配置过。

两个统计脚本,一个被关掉,一个没有。 页面源码里的 Clarity 加载器带显式短路:hostname 以 `.onion` 结尾就直接 return,连 script 标签都不建。UStat 的标签——`spst2.com/ustat.js`,`afterInteractive` 加载——没有这个判断,标签原样出现在洋葱 HTML 里。我只检查了页面发了什么、没有执行脚本,所以这是关于标签的陈述,不是关于它将发送的载荷。不对称本身就是结论:所谓「洋葱镜像没有统计」只对两个脚本里的一个成立,而两者的差别只有一行代码。

Tor 的代价是秒。 洋葱侧首页五次 TTFB 为 1.81–1.90 秒(中位 1.86),明网 0.053–0.070 秒;报价接口三次 2.49–6.03 秒对 0.21–0.58 秒;448 KB 的 sitemap 端到端 4.50 秒对 1.34 秒。首页压缩后 16.6 KB、1.99 秒传完——问题不在载荷,在电路。对下单这件事无所谓:报价有效期约 120 秒、入金窗口 30 分钟,页面多三秒什么也改变不了。但如果你要翻十五个币对再决定,这就是工具和苦差的分界线。 (Tor 换币安全吗)

明网侧反而缺一样东西。 Tor Browser 会找 `Onion-Location` 响应头,找到了就给一键跳转。明网响应里没有它,所以人已经在 Tor 上的访客,还得别人告诉他才知道地址。镜像本身很规矩:保留 `<link rel="canonical" href="https://veilswap.io">`,不会被当成重复页收录,`robots.txt` 与 `sitemap.xml` 也和明网一样是 525 与 448,943 字节。对搜索是对的,代价是「可发现性」取决于这个地址有没有被发在用户找得到的地方。 (Tor 换币安全吗)

审计任何镜像的七步,以及本站的答案。(1)逐字节比一个 API 响应体;(2)diff 一个 HTML 页面并解释每处差异;(3)diff 响应头,尤其 nosniff、frame 与 referrer;(4)在发出的 HTML 里 grep 统计域名;(5)确认到底有没有 TLS;(6)TTFB 取五次样本而不是一次;(7)在明网侧找 `Onion-Location`。本站结果是:同一后端、150 字节邮箱改写、五组头缺失、两个统计脚本只关一个、只有 HTTP/1.1、多约 1.8 秒。截至写作时(2026-11-07 06:1x UTC),100 USDT-TRC20 报 0.14333064 XMR,1,000 报 1.612097 XMR(两条路由,148bps 优势),反向 1 XMR 报 607.322 USDT;目录 438 种资产、65 条网络、52 种稳定币,其中 6 种需要额外 ID。数字会动,以页面实时报价为准。 (XMR 换 USDT 退出路线)

常见问题

.onion 镜像是另一个站,还是同一个站的副本?

同一个源站。2026-11-07 实测:两侧 JSON 逐字节相同——`/api/currencies` 71,655 字节、1,000 USDT-TRC20 报价 181 字节、不存在的订单 21 字节、`sitemap.xml` 448,943 字节。HTML 唯一差异是每页 150 字节,来自明网有、洋葱没有的 Cloudflare `/cdn-cgi/l/email-protection` 改写。

洋葱镜像是不是就完全没有统计了?

不是。Clarity 的加载器带显式短路:hostname 以 `.onion` 结尾就直接 return,连 script 标签都不建。UStat 的标签(`spst2.com/ustat.js`,`afterInteractive`)没有这个判断,标签原样出现在洋葱 HTML 里。我只检查了页面发了什么、没有执行脚本,所以这是「发送侧的不对称」,不是对载荷的判断。

洋葱为什么更慢?下单会受影响吗?

Tor 上首页五次 TTFB 为 1.81–1.90 秒(中位 1.86),明网 0.053–0.070 秒;报价接口三次 2.49–6.03 秒对 0.21–0.58 秒。对下单来说,这是在 120 秒报价有效期和 30 分钟入金窗口之内的几秒,不改变结果——改变的是浏览时的体感。

继续阅读

全部文章 →

准备好换币了吗?

无账户 · 无 KYC · 无邮箱

立即兑换
洋葱镜像实测:同一个兑换站,少的 150 字节与五组响应头 — VeilSwap