Finance klienta¶
Entity: ClientCredit, ClientPackage, CreditTransaction (tabulky client_credits, client_packages, credit_transactions)
Funkce: clientBooking — akce topup_credit, purchase_package
Prověřeno proti commitu: rozpracováno
Testy: backend/tests/Feature/Audit/FinanceKlientaAuditTest.php
Routy¶
| Routa | Perimetr | Ochrana | Controller |
|---|---|---|---|
GET/POST/PUT/DELETE /api/clientCredits |
interní | oprávnění payments |
EntityCrudController CRUD |
GET/POST/PUT/DELETE /api/clientPackages |
interní | oprávnění payments |
EntityCrudController CRUD |
GET/POST/PUT/DELETE /api/creditTransactions |
interní | oprávnění payments |
EntityCrudController CRUD |
GET /api/public/clientCredits |
veřejný klientský | klientská session a filtr client_id |
EntityCrudController::publicList |
GET /api/public/clientPackages |
veřejný klientský | klientská session a filtr client_id |
EntityCrudController::publicList |
GET /api/public/creditTransactions |
veřejný klientský | klientská session a filtr client_id |
EntityCrudController::publicList |
POST /api/public/clientBooking topup_credit |
veřejný klientský / staff | staff nebo klientská session | FunctionsController::bookingTopupCredit |
POST /api/public/clientBooking purchase_package |
veřejný klientský / staff | staff nebo klientská session | FunctionsController::bookingPurchasePackage |
Opravené nálezy¶
FIN-04 — Veřejné finanční listy vrací interní identifikátor firmy (nízká)¶
Stav: opraveno
Test: FIN-04: veřejné finanční listy nevrací interní identifikátor firmy
Ověřený fakt — veřejné listy klientských financí používají obecný SELECT *, company_id AS company_account_id
a sanitizace pro clientCredits, clientPackages a creditTransactions zatím neodstraňuje
company_account_id.
Oprava — public sanitizace pro clientCredits, clientPackages a creditTransactions
odstraňuje company_account_id před odesláním klientské odpovědi.
Dopad — klientské API vrací interní tenant identifikátor. Nejde o přímé zpřístupnění obsahu cizí firmy, ale je to zbytečný interní údaj na veřejném perimetru.
Nálezy¶
FIN-05 — Klient si může veřejnou akcí dobít demo kredit (vysoká)¶
Stav: otevřený
Test: FIN-05: klient si veřejnou akcí topup_credit nedobije demo kredit
Ověřený fakt — topup_credit přijme klientskou session stejného klienta a výchozí platební metoda
je demo. Pro demo nevzniká vazba na platební bránu ani povinný externí identifikátor platby,
ale kredit je navýšen a vznikne platební záznam.
Dopad — pokud je klientský portál veřejně dostupný, přihlášený klient si může navýšit kredit bez skutečné úhrady. Produkční dobití by mělo být omezené na staff nebo na ověřený návrat z platební brány; demo metoda by neměla být dostupná klientskému perimetru mimo testovací režim.
Ověřené bez nálezu¶
- Interní endpointy
/api/clientCredits,/api/clientPackagesa/api/creditTransactionsnejsou dostupné anonymně. - Klientské veřejné listy vyžadují session stejného klienta jako filtr
client_id. - Veřejný list klientských financí bez filtru
client_idvrací401. purchase_packagenezakoupí balíček pro cizího klienta.