安全

你将把开票、住客资料和客户地址交给我们。本页说明哪些已经完成,并在最后列出还缺什么——因为第二份清单比第一份更能说明我们是什么样的公司。

15
我们能证明的事项
01
尚欠缺的事项

隔离

边界是数据库,而不是代码里的一个条件。

大多数平台把所有客户放在同样的表中,靠一列来区分。只要有一条仓促写成、漏了过滤条件的查询,一位客户就能看到另一位客户的数据。在这里,这样的查询无处可查。

常见做法

WHERE tenant_id = ?

所有客户放在同样的表中。区分靠的是一个过滤条件,需要有人记得在每条查询中、永远都写上。只忘一次就足够出问题。

这里

USE ajja_tenant_…

每位客户都有自己的数据库。即使查询漏了过滤条件,返回的仍然只是属于你的内容,因为在查询存在之前,连接就已经指向了你这一侧。

ajja_tenant_<slug>

每位客户一个数据库
它叫 ajja_tenant_<o-teu-nome>,只包含属于你的 140 张表。每次请求,连接都会切换到属于你的那一个。

DROP DATABASE

删除就是删除
客户离开时,其数据库会被整体删除。不会留下一条标记为已删除、等着有人注意到的记录。

你是谁 · 你订阅了什么 · 有哪些模块

中央数据库只知道最少的信息
中央数据库保存你是谁、你订阅了什么、你有哪些模块。日常工作从不经过它。

账户与访问

谁能进入、如何进入,以及能走多远。

这些检查每一项都在服务器上运行。没有一项取决于浏览器决定显示或隐藏什么。

  1. 01 TOTP · 8 个代码 · 加密的密钥

    如果你愿意,可启用双重验证

    使用你已有的应用进行双重验证。只有在你用该密钥生成的验证码确认通过之后,密钥才会生效,这样就不会有人因为二维码扫错而被锁在门外。你会获得 8 个恢复码,它们和密钥都在数据库中加密保存。

  2. 02 5 分钟

    第二步有时限

    在输入正确的密码与手机上的验证码之间,有一张临时凭证,有效期五分钟。超过时间就从头开始——不会留下一个半途的登录等着被利用。

  3. 03 登录 5/分钟 · 2FA 10/分钟 · 注册 3/小时 · API 120/分钟

    尝试次数有上限

    登录同时按邮箱和按地址设置上限:同一组合每分钟五次尝试,同一地址每分钟二十次。如果只统计邮箱,陌生人就可以故意失败,把你的账户锁住。双重验证、注册,以及公开的入住登记和预订表单同样设有上限。已认证的 API 限制为每位用户每分钟 120 次请求,而不是按地址计算——同一办公室的两位同事不会共用对方的额度。

  4. 04 模块 + 角色 · 403

    权限在服务器上验证

    隐藏菜单项并不是安全措施。每个地址都要经过两项独立的检查——该模块在此客户下已启用,以及你的角色可以看到该模块——即使有人手工输入地址,也会返回 403。

  5. 05 404,而不是 403

    令牌只在自己的“家”里有效

    一个有效的令牌,如果指向另一位客户的名称,什么也读取不到。而且返回的是 404,而不是 403:试探客户名称的人无法由此得知哪些客户存在。

  6. 06 每个链接对应一项资源

    无需账户的门户

    住客和业主通过带有专属密钥的链接进入,该链接只打开一项内容,并且可以设置有效期。没有可被盗用的账户,也没有可在别处重复使用的密码。

一次请求,从头到尾

在任何人看到你的一行数据之前,要经过七个问题。

这是你按下按钮到结果出现之间发生的事情。顺序在应用启动时就已固定,而不是取决于每条路由当初是怎么写的——因为一项来得太晚的检查,已经让请求开始工作了。

  1. 01 404

    这是谁的“家”?

    自有域名、子域名或请求头会指明请求属于哪位客户。名称未知,到此为止。

  2. 02 402

    订阅是否有效?

    已暂停的工作区不提供服务,连读取也不行。

  3. 03 →

    指向连接

    数据库连接切换为该客户自己的数据库。此后的一切,包括失误,都只能触及这一侧。

  4. 04 401

    是谁在请求?

    令牌会被验证。没有有效令牌,就没有第五步。

  5. 05 429

    你已经发了多少请求?

    每分钟 120 次,按用户计算。超过后,服务器会表示到此为止。

  6. 06 404

    你属于这位客户吗?

    令牌所属的用户和请求所属的客户必须一致。正是这一关联,阻止了一个合法的令牌去读取隔壁的“家”。

  7. 07 403

    你能查看这个模块吗?

    模块必须在该客户下已启用,并且对你的角色可见。两项检查,而不是一项。

只有通过这七步之后,地址中的数字才会变成记录——而且总是来自第三步所选定的数据库。

会记录什么

谁做了什么,包括我们自己。

一个什么都不记录的系统,会迫使你只能相信我们的话。我们更希望你能自己核实。

数据属于你

出口是敞开的,并且有明确的标识。

一个让人难以离开的平台,等于承认它没有别的办法留住你。

一次请求,一个文件

完整导出
一次请求即可取回属于你的全部内容,来自中央数据库和你自己的数据库,并附上导出的时间。你团队的密码不在其中,这是应有的做法。

无违约金

无退出费用
随时取消。你导出的内容属于你,可以用任何工具打开——不是只有我们才能打开的我们自己的格式。

包含的内容

  • 客户
  • 项目
  • 发票
  • 预约
  • 图库
  • 照片
  • 预订
  • 服务工单
  • 物品
  • 路线
  • 文档
  • 报价
  • 团队
  • 订阅
  • 支持工单

我们尚未具备的功能

一份简短的清单,赶在你自己发现之前。

其中没有任何一项是承诺过或写入合同的。列在这里,是为了让你知道今天买到的是什么。

本页没有回答你的问题?

如果你要把第三方的数据交给我们,在签约之前你有权获得具体的答复。创建账户后再提问,或者先提问。

免费试用 14 天,只验证银行卡,不扣费。在订阅后第 15 天之前取消,无需支付任何费用。