Security

Last updated: 10 July 2026

This page lists the security measures actually implemented in Dinor— no certifications we don't hold, no vague promises. If you find a vulnerability, please tell us; details at the bottom.

1. Accounts & authentication

  • Passwords are hashed with bcrypt — they are never stored or logged in plain text and cannot be read by us.
  • Email ownership is verified with 6-digit one-time codes that are stored hashed, expire after 10 minutes, are single-use and are voided after 5 wrong attempts. Resending is rate-limited.
  • Password resets use the same hardened code flow and exchange the code for a short-lived, purpose-scoped token that cannot be used as a login session.
  • Dashboard sessions use signed JWTs; every request re-checks that the account still exists and is active.

2. Authorization & isolation

  • Role-based access control: owner, branch manager and staff roles see only what their role allows; staff can additionally be scoped to a single dining area.
  • Every operational query is scoped to the caller's own restaurant and organization — one restaurant can never read another's data.
  • Platform administration is a separate authentication system with its own accounts.

3. Ordering & table protection

  • Table QR codes use opaque, non-guessable tokens — table URLs cannot be enumerated.
  • Starting a session requires the physical table PIN, with rate-limited attempts to stop guessing.
  • Order submission is idempotent (a double-tap cannot create a duplicate order) and one table can never have two competing primary sessions.
  • Every order lands as "pending" for staff approval before the kitchen starts.

4. Payments

  • All card/UPI processing is done by Razorpay, a PCI-DSS compliant payment processor. Card details never touch Dinor's servers.
  • Every payment confirmation is verified server-side with an HMAC signature before anything activates and the plan purchased is bound to the order created by our server — it cannot be swapped client-side.
  • Payment IDs are unique in our database, so a replayed confirmation can never double-charge or double-credit.

5. Platform & infrastructure

  • All traffic is encrypted in transit with HTTPS/TLS across every domain (site, app, admin, API), including live WebSocket updates.
  • The API accepts browser requests only from the official Dinor domains (a strict CORS allowlist — no wildcards), for both HTTP and WebSocket connections.
  • All input is validated server-side; unknown fields are rejected outright.
  • Data lives in Supabase (PostgreSQL on AWS) with encryption at rest and managed backups; the API runs on Render and the frontend on Vercel — providers with mature physical and network security programmes.

6. Honest limitations

Dinor is an independent product early in its life: we do not yet hold formal certifications such as SOC 2 or ISO 27001 and there is no public bug-bounty programme. What we commit to is a small, careful codebase, the concrete controls above and fixing reported issues fast.

7. Reporting a vulnerability

Found something? Email hqdinor@gmail.com with the subject "Security" and enough detail to reproduce it. Please don't access other people's data or disrupt the service while testing (see the Acceptable Use Policy) — report and we'll take it from there. We acknowledge reports quickly, prioritise fixes and will credit you if you'd like.