Агуулгыг алгасах

Аюулгүй байдлын загвар

Хэн юунд итгэх, юунд хэзээ ч итгэхгүй. Энэ хуудас яагаад-ыг тайлбарлана; хэвлэж шалгах go-live checklist — «удахгүй».

1. Итгэлцлийн хил

            итгэнэ                                   итгэхгүй
 ┌──────────────────────────────┐        ┌────────────────────────────────────────┐
 │ Таны backend (client secret) │        │ Браузер, мобайл апп, терминал, машин,   │
 │ Gerege API (TLS)             │        │ sticker, QR, return_url, webhook-ийн    │
 │ Gerege App-ын төлөх цонх     │        │ гарын үсэггүй body, bridge-ийн хариу    │
 └──────────────────────────────┘        └────────────────────────────────────────┘

2. Терминал, машин, апп secret барихгүй

Client secret нь таны апп-ын бүх төлбөрийг үүсгэж, capture, cancel, буцаах эрх. Машин, kiosk, мобайл апп, браузерт байвал хэн нэгэн задалж авна. Тиймээс:

  • Машин / апп → таны backend (өөрийн нэвтрэлтээр) → Gerege. Машин зөвхөн pay_url, терминалын url-ийг л харуулна.
  • Secret-ийг орчны хувьсагч эсвэл secret manager-т; repo, лог, алдааны мэдээ, frontend bundle-д хэзээ ч.
  • Хамгийн бага эрх: түлхүүр бүрт хэрэгтэй scope-ыг л (preset), сервер бүрт тусдаа нэртэй түлхүүр, боломжтой бол IP allowlist. BI скрипт буцаалт хийх эрхгүй байх ёстой.
  • Алдагдвал шууд хүчингүй болгоно (POST /dev/apps/{id}/keys/{kid}/revoke — дахин нэвтрэлтгүй, хэзээ ч саадгүй), шинийг үүсгэнэ; төлөвлөсөн солилтод …/roll (хуучин нь давхцлын хугацаанд ажилласаар). Анхдагч хосыг POST /dev/apps/{id}/credentials тэр дор солино.
  • Терминал, дэд худалдагчийн бүртгэлд test түлхүүр бичиж чадахгүй (403 live_only) — алдагдсан sandbox secret бодит машины мөнгийг өөр тийш чиглүүлэхгүй.

3. Мөнгийг зөвхөн хүн хөдөлгөнө

  • Та төлбөр хүснэ; хүн дүнг Gerege App-ын өөрийн цонхонд харж, дансаа сонгож, Face ID-аар батална. Таны апп, вэб, машин төлөх товчийг хүний өмнөөс дарж чадахгүй.
  • URL хэзээ ч дүн агуулахгүй. pay_url, терминалын url, Gerege App-ын gerege-app:// холбоос нь хүлээн авагч, дүнг хэзээ ч prefill хийхгүй — дүн үргэлж серверийн intent-ээс. Хэн нэгэн QR солиход дүнг өөрчилж чадахгүй.
  • Bridge-ийн requestPayment хариу, return_url?pi= — дохио, баталгаа биш: үр дүнг backend-ээрээ уншина.

4. Төлөх цонхонд бүртгэлийн нэрс

Хүн хэнд төлж байгаагаа таны бичсэн текстээс биш, бүртгэлээс харна:

Юу Хаанаас Яагаад
Апп-ын нэр, icon registry, review-ээр батлагдсан фишинг апп өөр брэндийн нэр бичиж чадахгүй
Терминалын нэр, байршил терминалын бүртгэл (Face ID-аас өмнө) өөр sticker наасан бол хүн буруу машины нэрийг харна
Дэд худалдагчийн нэр дэд худалдагчийн бүртгэл хэний мөнгө болохыг хүн мэднэ
description таных (≤ 80) — гэхдээ мэдэгдэлд хэзээ ч платформын гарчгийн доорх апп-ын текст фишингийн суваг

5. Webhook-д итгэхийн өмнө

  • Гарын үсгийг түүхий body-оор шалгана (HMAC-SHA256(secret, t + "." + body), constant-time), |now − t| ≤ 300 с.
  • id-аар давхардлыг арилгана; чухал алхмын (бараа гаргах, захиалга биелүүлэх) өмнө GET-ээр төлвийг дахин уншина.
  • Webhook-ийн хаяг нийтийн https; Gerege дотоод сүлжээ, loopback руу хэзээ ч илгээхгүй.

6. Claim ба sticker

Терминалын код хэвлэгдсэн тул нууц биш. Хамгаалалт нь давхар: баталгаажаагүй claim 90 с-д суларна, хүн бүр ≤ 3 нээлттэй claim, худалдагч unclaim хийнэ, терминалын нэр Face ID-аас өмнө бүртгэлээс (Урсгалууд ба claim). Tag бүр уншуулах бүрт гарын үсэгтэй URL өгөх NTAG 424 DNA (SUN) — «удахгүй».

7. Хүний мэдээлэл

Хүнийг нэрээ нууцалсан id-аар л танина; худалдагчид төлбөр бүрт шинэ user_ref — Хүний мэдээлэл.