Аюулгүй байдлын загвар¶
Хэн юунд итгэх, юунд хэзээ ч итгэхгүй. Энэ хуудас яагаад-ыг тайлбарлана; хэвлэж шалгах 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 — Хүний мэдээлэл.