Điểm chính
- Dữ liệu của mỗi nhà hàng được tách biệt ngay trong cơ sở dữ liệu, không chỉ trong ứng dụng.
- Mật khẩu được băm bằng scrypt; đăng nhập sai nhiều lần sẽ khóa tài khoản trong 15 phút.
- Phiên được luân phiên ở mỗi lần làm mới, và một phiên bị dùng lại sẽ chấm dứt toàn bộ chuỗi đăng nhập.
- Bản ghi đơn hàng, tiền mặt, điểm và nhật ký kiểm tra đều chỉ cho phép ghi thêm.
Mỗi nhà hàng một không gian riêng
Tất cả nhà hàng chạy trên cùng một nền tảng, nhưng cơ sở dữ liệu thực thi việc tách biệt. Mọi bảng dữ liệu nhà hàng đều bật và bắt buộc áp dụng bảo mật cấp hàng, và mọi yêu cầu đều chạy trong một giao dịch được gắn với một nhà hàng. Tài khoản mà ứng dụng sử dụng không thể vượt qua các quy tắc đó.
Hai vai trò nội bộ được phép vượt qua các quy tắc này cho những công việc hẹp: các tiến trình nền, vốn chỉ được liệt kê những nhà hàng đang hoạt động trước khi xử lý lần lượt từng nhà hàng, và trung tâm điều khiển của đội ngũ SCALE, nơi không có quyền truy cập địa chỉ khách hàng, vị trí đơn hàng, mã băm mật khẩu hay nhật ký kiểm tra riêng của các nhà hàng.
Đăng nhập và mật khẩu
- Mật khẩu dài từ 8 đến 128 ký tự và được lưu dưới dạng mã băm scrypt với muối ngẫu nhiên; việc so sánh diễn ra trong thời gian không đổi.
- Nhập sai mật khẩu năm lần sẽ khóa tài khoản trong 15 phút. Đăng nhập vào một tài khoản không tồn tại mất cùng một khoảng thời gian, nên không để lộ tài khoản nào có tồn tại.
- Số lần đăng nhập còn bị giới hạn theo từng địa chỉ trong 15 phút: 10 lần với nhân viên, 60 lần với khách hàng, 5 lần đăng ký khách hàng mới. Số đếm được dùng chung trên mọi máy chủ.
- Mã xác minh gồm 6 chữ số, hết hạn sau 10 phút và chỉ cho phép thử một số lần giới hạn.
- Có thể bật tính năng chống bot của Cloudflare cho đăng nhập và cho việc đặt đơn.
Phiên không thể bị phát lại
Mỗi lần đăng nhập tạo ra một mã truy cập ngắn hạn (mặc định 15 phút) và một mã làm mới. Mỗi lần làm mới sẽ thay mã làm mới bằng một mã mới. Nếu một mã cũ bị dùng lại, toàn bộ chuỗi phiên sẽ bị chấm dứt, ngăn mã bị đánh cắp được sử dụng lâu dài.
Mỗi yêu cầu cũng kiểm tra phiên còn hoạt động hay không, nên việc xóa một nhân viên, đổi mật khẩu của họ hay hạ vai trò của họ sẽ đăng xuất họ khỏi mọi nơi ngay lập tức. Cookie của bảng điều khiển không thể bị script trên trang đọc và không được gửi bởi các trang web khác.
Vai trò với quyền tối thiểu
Quyền truy cập được xây dựng từ 29 quyền, từ xem đơn hàng đến xác nhận tiền mặt hay quản lý nhân viên. Chủ sở hữu có thể tạo vai trò với bất kỳ tổ hợp quyền nào, và nhân viên có thể được giới hạn trong một chi nhánh. Không ai có thể cấp một quyền mà chính mình không có, vai trò mặc định không thể chỉnh sửa, và không thể xóa chủ sở hữu đang hoạt động cuối cùng.
Bảng điều khiển ẩn những gì một vai trò không được dùng, nhưng đó chỉ để giao diện rõ ràng hơn: máy chủ kiểm tra quyền, chi nhánh và tư cách thành viên ở mọi thao tác.
Bản ghi không thể viết lại
Thay đổi trạng thái đơn hàng, sổ điểm, biến động tồn kho, lịch sử giá và nhật ký kiểm tra đều chỉ cho phép ghi thêm. Cơ sở dữ liệu từ chối mọi thao tác sửa hoặc xóa, nên việc chỉnh sửa được thực hiện bằng cách thêm một bản ghi mới, hiển thị rõ ràng.
Tôn trọng dữ liệu của khách hàng
- Vị trí đơn hàng chỉ được lấy khi ứng dụng đang mở, có sự đồng ý của khách, và được xóa sau 180 ngày.
- Khách có thể xóa tài khoản từ website hoặc ứng dụng. Địa chỉ, vị trí, thiết bị, thông báo và mật khẩu của khách bị xóa, và hồ sơ của khách được ẩn danh hóa.
- Để ngăn cùng một người nhận lại ưu đãi dành cho khách hàng mới, hệ thống chỉ giữ lại dấu vân tay được bảo vệ của số điện thoại và email.