Skip to content

安全性

是什么在保护这份记录

您的工作、客户的地址和您的资金都在这里。这个页面说明我们为保护它们做了什么、目前哪些已经生效,以及保护到哪里为止。

隔离

一家公司永远看不到另一家

其余一切都依赖于此,所以我们做了两重保护,并且由计算机替我们核验。

  • 公司之间有两道墙,而不是一道

    每条记录都带有所属公司的标记。我们的服务器每次向数据库发出请求,都只能取到发出请求的那家公司的数据。在这层之下,数据库本身也维持着同样的隔离墙,每一张保存公司记录的表都有自己的规则。所以仅仅是应用层的一个错误,不足以穿透这道墙。

  • 由计算机核验这道墙,而不是靠人的记忆

    一项自动化测试会读取生产数据库,找出每一张带有公司标记的表,只要有一张缺少对应规则,测试就会失败并点出它的名字。覆盖范围是一张张数清楚的,不是估出来的。例外清单是空的。

  • 发布前,我们会让一家公司去试探另一家公司

    每当我们新增一个应用可以调用的接口,都会为它配一项测试:以一家公司的身份登录,尝试读取另一家公司的数据。同步、定价和保存的文件名,各自都有自己的测试。

完整性

记录无法被悄悄改写

当一项工作出现纠纷时,历史记录就是凭证。它的设计就是让任何人,包括我们自己,都无法在您毫不知情的情况下改动它。

  • 历史记录只能追加,每一行都锁定前一行

    历史记录的每一行都带着上一行的指纹,任何一行只要被悄悄改动或删掉,这条链就会断。数据库本身也会阻止一切修改和删除。这道保护一旦缺失,我们的服务器就拒绝启动。

  • 付款记录从不修改

    要更正一个错误,我们会新增一行把旧的那行冲掉,而不是去改它。什么时候记了什么,始终清清楚楚,付款记录的意义正在于此。

  • 签名链接由我们的服务器生成

    用于签署文件的链接只能使用一次,无法被猜出,并会在设定的时间后失效。它由我们的服务器生成,手机上的应用从不自行生成这类链接。

传输途中,以及保存之后

数据去了哪里

Cloudflare 位于互联网和应用所连接的服务器之间。它执行我们自己设定的拦截规则,并对短时间内请求过多的来源限速。我们自己的服务器在它背后,再次执行相同的限制。

  • 传输途中全程加密

    手机与我们之间往来的所有数据都经过 HTTPS 加密,中途没有人能读取。正式站点还会向浏览器发送一条指令:只要访问过一次,就绝不再退回未加密的连接。请求会先经过 Cloudflare,而不是直接抵达我们自己的服务器。

  • 文件只保存在一个地区

    照片、文件和签名都存放在同一处文件存储里,这处存储固定设在一个地区,也就是北美东部。不管是哪家公司、在哪里干活,都是这一处。正式服务器启动时会检查这项配置,如果地区缺失,或者被设为“自动”,就会拒绝运行。

  • 我们从不保存您的密码

    我们不保存您的密码,也无法为您找回它。我们保存的是一个经过加密处理的版本(Argon2),无法被还原回您的密码:足以在您登录时核对,但永远不足以读出原文。另外,短时间内登录、注册和重设密码的尝试次数都有上限。

在手机上

手机本身也是我们保护的一部分

手机会被忘在货车车斗里,会借给学徒用,也会隔着柜台递出去。我们在这里所做的设计,正是为了应对这些情况,而不是为了一张办公桌。

  • 应用本身自带的可选锁定

    手机被人捡走时,光凭已经登录这一点,不该就让对方拿到整家公司的数据。应用锁定会在打开应用前,先要求验证手机本身的屏幕锁或指纹。它默认关闭,要您自己打开;而且只有手机本身已经设了屏幕锁,我们才会给出这个选项。

  • 访问密钥保存在手机自身的加密存储中

    应用需要在手机上保存一些私密信息,比如让您保持登录状态的凭证。它把这些信息放进 Android 的密钥库,也就是由手机硬件本身保护的加密存储,而不是放在应用的普通文件里。

持续性

备份、事故处理,以及如何取走您的数据

  • 数据库的加锁副本,存放在服务器之外

    我们每小时为正在运行的数据库做一份完整副本。副本在存放之前会用加密上锁,这项任务不会留下未上锁的副本:它先确认上锁的文件确实已经锁上,然后才删除没上锁的那一份。接着它核对副本自身的内容清单,把副本送到一处单独的存储空间,应用本身没有登录该存储空间的凭据,再读回来确认副本已经送达。数据库还会在每一次改动发生时把它连续记录下来,这份记录同样被复制到服务器之外,所以把数据放回去并不只限于最近一份完整副本。照片、PDF 和签名图片也复制到同一处单独的存储空间。旧副本在两个地方都按固定的时间表删除。把话说明白:那处单独的存储空间是同一家存储公司里的第二个存储位置,不是第二家公司。

  • 我们把备份放回去,以证明它们真的有用

    从来没有被放回去过的备份是一种指望,不是计划。所以我们取一份正在运行的数据库的真实副本,装进一个备用数据库,确认记录确实在里面,然后才把这个备用库丢掉;其中也包括打开一份已经存放好的加锁副本,而不是刚做出来的副本。文件存储我们也做了同样的事:每一个恢复出来的文件都与复制时记下的指纹做过核对。每次演练都写下来并注明日期。下面是这些演练没有证明的事,因为这比它们证明了什么更重要:我们从未在新机器上重建过整个服务,从未把持续的改动记录向前重放到某个选定的时刻,从未把备份放回正在运行的数据库,也从未从头到尾计过一次完整恢复的时间。这就是我们不公布任何恢复目标的原因。

  • 出问题时,有一份写好的应对方案

    一旦出了问题,我们会遵循一份写好的方案,而不是临时决定。步骤是:评估严重程度、阻止问题扩散、让所有人下线并关闭付款链接和团队访问权限、更换我们的密钥、保存历史记录并核验它未被篡改,然后评估损失并通知受影响的人。我们承诺会尽快通知您,不会无谓拖延。我们没有公布一个固定期限,因为我们无法证明自己一定能做到。

  • 您的数据随时可以取走

    您可以直接在应用内下载账户的副本:客户、工作、发票、付款、收据、照片,以及您的发票和报价单 PDF。您也可以在应用内删除账户。访问权限会立即停止,我们会在设定的天数后彻底删除数据。至于谁做过什么的那份历史记录,我们会特意保留,因为它只能追加,无法删除。

我们没有做出的承诺

下面这份清单列出了我们没有具备、也没有承诺的事项。如果其中有哪一条对您要紧,这就是实话。在把您的工作交给我们之前,请先想清楚。

  • 没有任何认证,也没有外部审计 我们没有 SOC 2 报告、没有 ISO 27001 认证,也没有 PCI 或 HIPAA 认可,这些都是大型采购方常要求的安全认证。我们没有付费请公司以外的人尝试入侵。如果有人告诉您 Zeus 并非如此,那不是实话。

  • 没有关于在线时长或恢复速度的承诺 我们没有公布应用正常运行的比例,没有公布恢复服务的速度目标,也没有公布可能丢失多少近期数据的目标,因为我们无法保证这些数字。

  • 没有绝对安全的承诺 没有任何系统是完全安全的。任何声称做到了的页面,说的都是宣传语,不是事实。

  • 您在没有信号时完成的工作,在到达我们这里之前是没有备份的 没有信号时所做的修改,只会留在那部手机上,直到应用连上服务器为止。请在重新有信号后打开应用,让它能够上传。

报告一个安全漏洞

如果您发现了什么问题,我们更希望是从您这里听到,而不是从依赖这款应用的某家企业那里听到。我们没有赏金计划,也没有报酬,但会有一位真人给您一个直接的回复。

请遵循以下规则

  • 在告诉其他人之前,给我们时间修复。
  • 调查期间,请不要打开、修改或保存任何不属于您的数据。
  • 请不要用大量流量测试正式站点的承受能力,不要对它运行自动化扫描工具,也不要尝试入侵,除非我们已经事先书面同意。
  • 请告诉我们您做了什么、看到了什么,以及足够让我们能够复现的细节。简单的说明也好过完全没有说明。

这些规则和我们的可接受使用政策相同。

本页面的状态说明

这个页面是为了让人阅读而写的。它不是合同,也不承诺任何您可以通过法律途径向我们主张的内容。真正具有这种效力的文件,是我们法律文件包中的服务条款隐私政策。安全方面的工作永不停止,所以这个页面上的内容会不断变化。如果这个页面与那些文件之间出现分歧,以那些文件为准。

对本页面任何内容有疑问,请发送到 [email protected],其他事项请见联系页面