隐私政策
dkuvpn 保存的是一个 Duke 邮箱地址、一个 netid、一条付款记录和一个流量计数。本页逐项列出:它们存放在哪里、还有谁能看到、什么时候被删除。
最后更新:2026年8月23日
本政策涵盖什么
dkuvpn 由 Duke Kunshan 的学生运营,服务于 Duke Kunshan 的学生。它不是学校提供的服务。这里没有公司、没有注册地址,也没有可供列出的数据保护官——只有一个邮箱,而读这个邮箱的人,正是持有本页所述数据的人。
本政策涵盖三样东西:本网站、创建账户的登录流程,以及背后代理面板上的那个账户。它不涵盖你连上之后做了什么:你打开的网站有各自的政策,本服务不是其中一方。
下文引用的每个数字——十分钟、五次尝试、三十天——都是代码里的真实数字,不是取整后的说法。
我们收集什么,以及每一项为什么存在
这就是本网站和登录环节的全部清单。代理面板上的账户另有一份自己的短清单,下一节会完整列出——这两份清单之外,关于你的东西我们就没有。
- 你的 Duke 邮箱地址。你输入它来登录,它只有一个用途:给你发送六位验证码。它被交给 Resend 投递,不会写进我们自己的数据库。
- 你的 netid——地址中 @ 之前的部分。它是你在面板上的用户名,也是其他一切所依据的身份。如果地址所在的域名不是首选域名,netid 会加上该域名的第一段作后缀,这样 ab999@duke.edu 和 ab999@dukekunshan.edu.cn 仍然是两个人,而不会共用一个账户。
- 登录验证码,以哈希形式保存。存下来的是验证码与一份新生成的 16 字节随机盐经 scrypt 计算的结果,而不是那六位数字。任何人读这个数据库——包括我们——都读不出验证码。
- 发出验证码请求的那个 IP 地址,取自我们的反向代理设置的 X-Real-IP 头。写下它只有一个目的:这个接口会向调用者填写的任意地址发邮件,若不按地址计数,它就是一枚对准任何 Duke 账户的邮件轰炸器。
- 你浏览器里的一个 Cookie:dkuvpn_session。它携带你的 netid 和一个过期时间,并以 HMAC-SHA256 签名;页面全靠它判断该显示谁的面板。详细版本见 Cookie 政策。
- Gumroad 收据上的邮箱地址——仅当一笔付款没有带上 netid 时才会用到。它会被从 Gumroad 读回、换算成 netid 以便发放时长,并写入服务器日志,好让在无法自动发放时由人工补发。
- 每笔付款一条记录:Gumroad 的订单号、这笔钱付给了哪个 netid、发放了多少天、以及时间。整条记录就这些——没有金额,没有卡号,没有姓名。
这里没有密码,没有安全问题,也没有要填的个人资料。服务只问你一个地址,因为它需要知道的就这么多。
代理面板保存什么
你的账户在一台 Marzban 面板上,本站是它的前端。面板在你的用户名下保存:
- 账户状态——启用、停用、超额、过期或待启用。
- 一个累计数字:该账户迄今承载的总流量,以字节计。
- 以字节计的流量上限,以及一个到期时间。免费一周期间,这两项都来自试用模板。
- 你的订阅链接和其中的令牌,以及客户端连接所需的代理配置。
- 账户归哪个管理员所有——也就是本应用登录所用的服务账户。你的面板页面永远不会收到这个字段,也不会收到原始代理配置。
- 一条写着 dkuvpn self-service 的备注,用来把本站创建的账户与管理员手工创建的账户区分开。
- 你的账户最后一次承载流量的时间。它只是一个会被覆盖的时间戳,不是一份会话历史。但它确实意味着,面板能说出你大致最后一次连接是什么时候。
- 最后一次拉取订阅链接的客户端软件,也就是它发送的 User-Agent 字符串——通常是你设备上那个 VPN 应用的名称和版本。只保存一个值,每次拉取都会覆盖。
那个总数是一个计数器,不是一份历史记录。dkuvpn 不保存你打开过哪些网站、连接过哪些地址、设备解析过哪些域名——在这个应用里,根本没有地方能写下这样的记录。那个计数器能告诉别人你的账户跑了 4.2 GB,却无法告诉他们这些流量去了哪里。
这个说法诚实的边界在于:代理服务器在转发流量的那一刻,必然要经手这些流量——代理本来就是这么回事,任何政策都写不掉它。这里承诺的是事后被写下并保存的东西,也就是上面这份清单,此外再无其他。
我们凭什么可以保存这些
凡是法律要求服务方说明理由的地方,我们的理由都很短:上面每一项之所以存在,是因为没有它服务就跑不起来;而且它们的理由互不重复。
- 地址、验证码哈希和 netid——是你要求登录的,没有它们就没办法让你登录。
- IP 地址——防止登录接口被用来发送没人索要的邮件。就这个用途而言,它只被计数,每小时十次,仅此而已:频率限制记录里只有地址和时间戳,从不与你的上网行为关联,也从不展示给任何人。与它无关的另一件事是,Web 服务器会保留一份普通的访问日志,其中确实记录了哪个地址请求了哪个页面;详见每一项存放在哪里。
- Cookie——严格必要。没有它,网站分不清你的账户和别人的账户;这也是它无需征询即被设置、并且没有同意横幅的原因。
- 付款记录——一笔交易的凭证,也是让同一笔付款不会被发放两次的东西。
这里没有任何数据是为营销而收集的;为上述某个理由收集的数据,之后也不会挪作另一个用途。
我们不收集什么
下面每一条都是对着代码核对过的,不是想当然:
- 你的姓名、学号、照片、电话号码、出生日期或通讯地址。既不询问,也没有地方存放。
- 卡号、银行信息,或任何关于你如何付款的细节。结账在新标签页的 gumroad.com 上完成,本站从头到尾看不到。
- 密码。根本没有密码——收件箱里的验证码就是登录的全部。
- 广告、标签管理器、追踪像素或任何第三方脚本——浏览器里也没有任何形式的统计分析。本站任何页面都不会从别的主机加载东西,字体也不例外。访问量是事后统计出来的:读的是同一台机器上 Web 服务器自己的日志,没有任何东西在页面上运行,也不牵涉别的公司。那份日志详见每一项存放在哪里。
- 你的位置信息,除了一个 IP 地址本身对你索取验证码时所在网络的暗示之外。
- 你设备上的任何东西:没有通讯录,没有文件,没有设备标识符。本站只是 HTML,而客户端 App 也不是我们的。
每一项存放在哪里
六个地方,再无其他:
- 本站所在服务器上的一个 SQLite 文件,由本应用独占。它只有三张表:验证码哈希、频率限制记录、付款记录。里面关于任何人的信息就只有这些。
- 面板自己的数据库,保存着上文描述的那个账户。
- 你的浏览器,保存着会话 Cookie。会话本身在服务器上不留任何记录——Cookie 自己携带了全部信息,所以任何地方都没有一张会话表。
- 同一台机器上的服务器日志:哪笔订单给哪个 netid 加了多少天,以及出错时的报错。
- 还是同一台机器上的 Web 服务器访问日志。这就是任何 Web 服务器都会为它应答的每一次请求写下的那种普通日志,访问量统计也来自它:请求来自哪个地址、请求了哪个页面、时间、响应码,以及浏览器对自己的描述。保存十四天,之后由轮转删除。唯一被排除在外的是订阅链接,因为那条链接本身就是凭证,而日志不是放凭证的地方。
- Resend 和 Gumroad,各自保存下一节所描述的内容。
日志里有一种情况会带上邮箱地址:当一笔付款到达却没有任何信息能指认买家时,套餐和收据上的地址会被记入日志,好让人工把时长补发给他——总好过一个已经付过钱的学生白白损失。日志是出问题时用来排查的,除此之外没有别的用途,也不会用它拼出任何东西。
还有谁能看到
只有三方会收到东西,而且每一方只收到一样:
- Resend 负责投递登录邮件。它收到你输入的地址——其中含有你的 netid——以及邮件里的验证码。此外它什么都收不到:不知道你的账户,不知道你的用量,也不知道你付了什么。
- Gumroad 负责收款,并且是记录商户。它收到你的卡片信息和账单信息,这两样都不会传到本站。但有一样会反向传回来:当一笔付款没有带上 netid 时,应用会向 Gumroad 读回这笔订单,并取用收据上的邮箱地址——因为那是唯一还能找出这笔时长该记到谁名下的线索。为你生成的结账链接还带着你的 netid,因为这个标记正是一笔付款找到你的账户的全部机制。
- 出口服务器负责承载你的流量。这就是这项服务本身,服务条款里有说明。
Resend 和 Gumroad 各自持有的内容,适用它们自己的隐私政策,而不是本政策。从这里发出去给它们的,就是上面这两条,别无其他。
没有其他任何人会收到任何东西。具体来说:不出售、不出租、不交换——既没有可卖给的广告商,收集到的东西也没有广告商想要的。你的账户不会被上报给 Duke Kunshan University 或 Duke;dkuvpn 不是学校的服务,也没有通往学校的上报渠道。这里没有数据经纪商,没有统计分析供应商,也没有邮件列表。
还有一条,而对某些人来说,它比上面所有内容都更重要。登录验证码是发到你的学校邮箱的,所以它会经过管理那个邮箱的一方,并被其保存。Duke 的邮件系统会记录它接收的每一封邮件的发件人、收件人和主题行,那里的管理员也能读取该邮箱里的内容。dkuvpn 不会把你的账户上报给学校,也没有办法上报;但学校自己的邮件日志仍然可以显示,你收到过一封 dkuvpn 的登录验证码邮件。本站的任何设置都改变不了这一点。在别人管理的地址上收邮件本来就是这个意思,任何往那里发邮件的服务也都一样。
如果有一天来了一份法律要求必须回应的调取要求,能交出去的就是本页列出的东西——一个 netid、一份付款记录、一个流量总数、一个最后活跃时间戳,以及一个客户端应用的名称——因为本页这两份清单之外的东西,我们从来没有写下来过。我们不会为了配合而临时造出一份记录;在允许告知你的情况下,我们会告知。
跨境传输的数据
这项服务的意义,就在于你的流量会离开中国大陆。出口是 Durham、Iowa、Seoul、Tokyo、Bangkok 和 Singapore;选择其中之一,就是选择你的连接在哪里露面。
另有两样东西跨境。登录邮件经由 Resend,付款经由 Gumroad,两者都在中国大陆之外,因此你输入的地址和你购买记录的处理也发生在境外。登录和付款,就是你同意这一点的时刻——一个从不接收你地址的服务,没法给你发验证码。
你的 Duke 邮箱是学校的系统,不是我们的。验证码会落到 Duke 运行你邮箱的地方,无论那在哪里。
本页不写明每台服务器位于哪个国家,因为换主机时它会变,而写死国名的政策会悄无声息地过时。你可以来问,我们会告诉你某台服务器当下在哪里。
在中国大陆使用未经许可的 VPN 受中国法律限制,本文件改变不了这一点。这对你意味着什么,服务条款里有说明;本页只谈数据。
这些东西保存多久
下面这些时间间隔,都是代码里真实的:
- 登录验证码:可用期十分钟;之后由下一个碰到它的动作删除——验证时遇到过期记录会当场烧掉,而每一次索取新验证码都会清扫表里所有过期记录。可能撑过十分钟的,只是一条早已失效的验证码哈希,等着下一次请求把它扫掉。
- 频率限制记录——netid、IP 地址、时间戳:一小时。每次索取验证码都会触发清扫,删掉所有超过一小时的记录;因此一条记录最多留到它满一小时之后的第一次请求为止。如果一整天没人索取验证码,最后那批记录就在那儿等到有人来为止。
- 付款记录:刻意长期保留。下文你的权利解释了为什么,以及这对删除意味着什么。
- Web 服务器访问日志:十四天。每天轮转一次,最旧的一份在轮转时被删除,所以一次请求会在它发生那天之后的第十四次轮转时消失。此后不再从中保留任何东西——从中统计出来的访问量都是总数,不含任何地址。
- 会话 Cookie:从写入它的那次登录起 30 天,并且不会随你浏览而续期。退出登录会当场删除它。
- 你在面板上的账户:只要账户还在就一直保存。删除账户会把用户名、流量总数、到期时间、流量上限和订阅令牌从面板自己的数据库里清掉。
- Resend 和 Gumroad 按各自的周期保存各自的记录——一封已投递的邮件,一笔订单。这两个周期都不由我们决定。
有什么在保护它
都是具体措施,不是形容词。大致按重要性排列:
- 登录验证码从不被存下来。存下来的是验证码与 16 字节随机盐经 scrypt 计算的结果,并以常数时间比对——所以无论是拿到一份数据库副本,还是测量一次错误猜测的耗时,都套不出验证码。
- 猜测被限制为每个验证码五次,而且第五次错误会直接销毁验证码,不会留着让人稍后再试。六位数字、五次机会、十分钟,这个空间没人能暴力破解。
- 索取也受限:每个 netid 每 15 分钟三次,每个 IP 地址每小时十次。正是这一条,让这个接口无法被调转枪口对准别人的收件箱。
- 会话 Cookie 是 httpOnly 的,页面上的脚本读不到它;SameSite=Lax,别的网站没法让你的浏览器把它交出去;生产环境下带 Secure,因此在正式站点上它只走 HTTPS;并且经过签名,内容无法被改成另一个学生的 netid。
- 那把能读写面板上每一个账户的令牌,只存在于一个仅限服务端的模块里,模块顶部有运行时守卫:一旦它被加载进浏览器就会抛错。它从未成为页面的一部分。
- 这把令牌属于一个刻意设置为非 sudo 的管理员。sudo 管理员可以重启代理内核、改写节点配置,所以本应用被设计成:即使它被攻破,也够不到这两样。
- 一个通过验证的 Duke 地址映射到面板上的普通用户,永远不会映射成管理员。任何学生都不会拿到一份能读到别人账户的凭证。
- 每个响应都带 X-Content-Type-Options: nosniff、X-Frame-Options: DENY 和 Referrer-Policy: same-origin,因此本站不会被别的网站嵌进框架,你从这里点出去时也不会泄露你当时所在的页面。
有两样东西要靠你自己保护。你的订阅链接等同于凭证:拿到它的人就能用你的账户,所以不要公开发布,也不要传来传去。会话 Cookie 同理,谁拿到它谁就是登录状态——在不属于你的电脑上,记得退出登录。
以上都不能让这项服务坚不可摧,何况它是几个学生在自己的课业之余运营的。如果你发现了问题,请写信到 support@dkuvpn.com——我们宁愿从你这里听到,也不愿蒙在鼓里。
万一真的被入侵,我们会告诉你,而不是让你自己去发现。本页会挂出一则带日期的通知;每一个我们有理由认为被波及的账户,都会收到一封手写的邮件——像停用警告那样手写,因为服务本身只会发送登录验证码。信里会写清楚被拿到的是什么、发生在什么时候,以及有什么是值得你去做的。入侵者能拿到的,就是本页已经列出的那些:netid、付款记录、流量总数,以及仍处于登录状态的会话。他们拿不到的,是你去过哪里——这样的记录根本不存在,也就无从拿走——也拿不到一个还能用的登录验证码,因为存下来的是它的 scrypt 哈希,而且十分钟之后它本身就已失效。
你的权利,以及删除能触及到哪里
账户是你的。你可以要求:
- 查阅——大部分内容已经在你的控制台上:netid、状态、已用流量、流量上限(如果设了)、到期时间、订阅链接。其余部分(也就是记在你 netid 名下的付款记录)问我们,我们会告诉你。
- 更正——netid 是由你登录所用的地址推导出来的,所以只有地址本身错了,它才会错。写信给我们,我们会更正或删除由它创建的账户。
- 删除——你说一声,你在面板上的账户就会被删除:用户名、流量计数、到期时间、流量上限、订阅令牌。验证码记录在生成十分钟后就不再可用,频率限制记录在一小时后就不再计数;两者都会被下一次索取验证码时的清扫删除,具体见上文的保存期限一节。
- 投诉,或对上述任何一点提出异议——只有一个邮箱,读它的是人,不是工单队列。
删除触及不到付款记录。一条记录是订单号、netid、天数和日期,之所以保留,是因为它是「这笔付款只发放过一次」的凭证:一笔被退款的订单,是把天数置为 0,而不是删除整条记录;没有这条记录,一份被重发的付款通知就会把同样的天数再发一遍。它同时也是「我付过钱,钱去哪了?」这个问题的答案。netid 会留在里面,因为它是唯一把一笔付款和一个账户联系起来的东西。
作为记录商户,Gumroad 保有它自己的订单记录。一张发票不是我们能删的,来问我们也删不掉——那个请求要提给 Gumroad。同一件事的金钱一侧,见退款政策。
删除账户有两个必须讲明的后果:它不退还未使用的时长,也拦不住一笔已经在途的付款。发放订单的那段代码在找不到账户时会自行开通一个,所以之后到达的付款会把你的账户重新创建出来。
变更,以及如何联系我们
本页带有日期。内容变了,顶部的日期就跟着变;而且凡是涉及收集什么、谁会收到、保存多久的改动,都会写进它所影响的那一条里,而不是塞进一段概述。这个日期就是公告——这里没有邮件列表,我们也不会为政策的事给你发邮件。
关于本页的任何疑问,以及依据你的权利提出的任何请求,都请发到 support@dkuvpn.com。读这个邮箱的是几个在上课间隙运营 dkuvpn 的学生,我们会在一个工作日内回复。
如果本页写的和服务实际做的对不上——我们声称不保存却保存了,或者保存了却没有列出——那就是一个 bug,要么在代码里,要么在这份文件里。告诉我们,它会被修好。