全部文章

平台

SCALE Order如何保护您的餐厅数据

餐厅面对的是真实的顾客和真实的资金。本文介绍SCALE Order内置的各项保护措施,从如何隔离每家餐厅的数据,到如何保障登录、会话和记录的安全。

要点

  • 每家餐厅的数据在数据库层面即相互隔离,而不仅仅是在应用层面。
  • 密码使用scrypt进行哈希处理;多次登录失败会将账号锁定15分钟。
  • 每次刷新时会话都会轮换,一旦旧会话被重复使用,整条登录链都会终止。
  • 订单、现金、积分和审计记录均只能追加。

每家餐厅都有独立空间

所有餐厅都运行在同一个平台上,但隔离由数据库强制执行。每张餐厅数据表都启用并强制执行行级安全策略,每个请求都在限定于单个餐厅的事务中运行。应用使用的数据库账号无法绕过这些规则。

只有两个内部角色可以为特定的有限任务越过这些规则:一是后台任务进程,它们只能先列出哪些餐厅处于活跃状态,再逐家餐厅执行工作;二是SCALE团队的控制中心,它无法访问顾客地址、订单位置、密码哈希值或餐厅自己的审计日志。

登录与密码

  • 密码长度为8到128个字符,使用随机盐值以scrypt哈希形式存储,并以恒定时间进行比对。
  • 连续五次输错密码会将账号锁定15分钟。登录不存在的账号所需的时间与登录存在的账号相同,因此不会泄露哪些账号存在。
  • 登录尝试还会按IP地址在15分钟内限制次数:员工10次,顾客60次,新顾客注册5次。所有服务器共享这些计数。
  • 验证码为6位数字,10分钟后失效,且只允许尝试有限次数。
  • 可以为登录和下单启用Cloudflare防机器人保护。

无法被重放的会话

登录后会获得一个短期访问令牌(默认15分钟)和一个刷新令牌。每次刷新都会用新的刷新令牌替换旧令牌。一旦旧令牌被再次使用,整条会话链都会终止,从而使被盗令牌无法被长期使用。

每个请求还会检查会话是否仍然有效,因此移除某位员工、修改其密码或降低其角色权限,都会让其在所有设备上立即退出登录。管理后台的Cookie无法被页面脚本读取,也不会由其他网站发送。

最小权限角色

访问权限由29项权限组成,从查看订单到确认现金收款或管理员工。店主可以任意组合这些权限来创建角色,并可限定员工只管理一家门店。任何人都无法授予自己不具备的权限,内置角色无法编辑,最后一位在职店主也无法被移除。

管理后台会隐藏某个角色无法使用的功能,但这只是为了界面清晰:服务器会在每次操作时核验权限、门店和成员身份。

无法改写的记录

订单状态变更、积分台账、库存变动、价格历史和审计日志均只能追加。数据库会拒绝任何修改或删除,因此更正都通过追加一条新的、可见的记录来完成。

尊重顾客数据

  • 仅在应用打开期间并经顾客同意后才获取订单位置,并在180天后删除。
  • 顾客可以在网站或应用中删除自己的账号。其地址、位置、设备、通知和密码将被删除,个人资料将被匿名化。
  • 为防止同一人再次领取新顾客优惠,仅保留其电话号码和电子邮箱经保护处理的指纹。
  • 平台

    店长应用与每日打烊报表

    店长应用把餐厅管理后台装进Android手机:每笔新订单都有通知,开店和打烊都有提醒,每天都会保存一份打烊报表。

  • 会员忠诚与增长

    会员积分如何运作:累积、生效、兑换与到期

    积分计划只有在规则可预期时才能赢得信任。本文详细说明SCALE Order如何累积、暂存和兑换积分,积分如何生效和到期,以及为什么其背后的积分台账无法修改。