# Güvenlik Tasarımı

## Güvenlik ilkesi

Sistem “hacklenemez” iddiasında bulunmaz. Amaç; bilinen saldırı sınıflarını azaltmak, mükerrer kazancı engellemek, iz bırakmak ve hatalı işlemi geri inceleyebilmektir.

## Uygulanan kontroller

### Sunucu otoritesi

- Tap ödülü istemci tarafından belirlenmez.
- Enerji, VIP ve booster çarpanı API tarafından hesaplanır.
- Çark segmentini kriptografik güvenli sunucu RNG seçer.
- Görev ilerlemesi sunucu game eventlerinden oluşur.
- Dönüşüm oranı her işlemde server setting'den okunur.

### Idempotency

Aşağıdaki işlemler benzersiz anahtar ister:

- Tap batch
- Çark spin
- Görev reward claim
- OC_POINTS dönüşümü
- VIP satın alımı
- Yönetici puan dağıtımı

Aynı anahtar ikinci kez geldiğinde ilk cevap döner; yeni ledger kaydı oluşmaz.

### Ledger

- OC_POINTS ve OC_TOKEN ayrı asset'tir.
- Her transferde bir negatif ve bir pozitif entry oluşur.
- Transaction toplamı sıfır olmak zorundadır.
- Kullanıcı hesabı negatif bakiyeye düşemez.
- Materialized balance, entry toplamıyla reconcile edilir.

### Authentication

- HMAC-SHA256 imzalı kısa/orta ömürlü token
- Token hash'inin session tablosunda bulunması zorunlu
- Session revoke desteği
- Admin ve kullanıcı role ayrımı
- Admin login rate limit
- Telegram `initData` imza ve `auth_date` doğrulaması

### HTTP

- CSP
- X-Content-Type-Options
- X-Frame-Options
- Referrer-Policy
- Permissions-Policy
- Production HSTS
- JSON body limiti
- Güvenli static path çözümü
- Standardize hata yanıtı ve request ID

### Admin

- Doğrudan SQL/bakiye düzenleme UI'si yoktur.
- Puan dağıtımı ledger transaction üretir.
- Setting, VIP, çark, görev ve kullanıcı VIP değişiklikleri audit log'a yazılır.

## Üretim öncesi zorunlu ek kontroller

- PostgreSQL + Redis tabanlı multi-instance rate limit
- Cloud WAF ve DDoS koruması
- Secret manager ve KMS
- Kurumsal admin SSO + passkey/donanımsal MFA
- iOS App Attest
- Android Play Integrity
- Certificate pinning ve güvenli pin rotation
- Reklam server-side verification
- Apple/Google receipt server doğrulaması
- Container/SBOM/SAST/DAST pipeline
- Bağımsız penetration test
- Mainnet smart contract audit
- Fraud device graph ve anti-Sybil risk servisi

## Threat örnekleri

| Tehdit | MVP kontrolü | Üretim ek kontrolü |
|---|---|---|
| Tap replay | Idempotency + enerji | Attestation + Redis sequence state |
| Çift görev ödülü | Unique period/claim + transaction | Distributed lock gerekmez; PostgreSQL constraint |
| Sahte Telegram kullanıcı | initData HMAC | Bot token secret manager |
| Receipt replay | Henüz gerçek IAP kapalı | Store transaction unique + server API |
| Reklam callback spoof | Provider imzalı test oturumu | Provider SSV signature + unique tx id |
| Admin ele geçirilmesi | Ayrı role/session, audit | SSO, MFA, IP/zero-trust |
| Ledger bozulması | Reconciliation testi | Sürekli alarm + immutable audit archive |
| Referral bot çiftliği | Tap nitelik eşiği | Device attestation, IP/ASN ve ödeme grafiği |

## Ödeme güvenliği

### Provider secret'ları

- Provider secret JSON'u AES-256-GCM ile şifrelenir.
- Şifreleme anahtarı `AUTH_SECRET` üzerinden türetilir.
- Panel ve admin API secret'ları maskeli döndürür.
- Audit log'a açık secret yazılmaz.
- Mainnet private key veya seed phrase kabul eden bir alan yoktur.

### Checkout ön doğrulaması

Ödeme emri oluşturulmadan önce:

- sağlayıcı aktif ve yapılandırılmış mı
- para birimi sağlayıcı için açık mı
- kur var mı
- minimum/maksimum limit uygun mu
- banka hesabı aktif mi
- kripto varlık/adres/fiyat hazır mı
- bölgesel kripto politikası izin veriyor mu

kontrol edilir. Böylece geçersiz checkout denemeleri yetim ödeme emri oluşturmaz.

### Webhook

- PayTR callback hash'i doğrulanır.
- Generic hosted callback raw body üzerinden HMAC-SHA256 doğrular.
- Provider event ID benzersizdir.
- Duplicate callback yeni entitlement veya token tahsisi oluşturmaz.
- Ödeme tutarı siparişin altında ise callback reddedilir.
- Webhook body ve rate limit uygulanır.

### Public katalog

Admin panelinde bulunan şablonlar otomatik olarak kullanıcıya gösterilmez. Yöntem ancak:

- etkin
- zorunlu kimlik bilgileri/checkout URL'si tamamlanmış
- banka hesabı veya kripto tahsilat adresi hazır
- global/bölgesel anahtar izinli

olduğunda public kataloğa çıkar.

## Kimlik, cüzdan ve dağıtım kontrolleri

- E-posta parolaları tek yönlü KDF ile saklanır; düz parola tutulmaz.
- OAuth state/PKCE ve tek kullanımlık değişim kodu kullanılır.
- Cüzdan private key'i kullanıcının parolasından türetilen anahtarla AES-256-GCM kullanılarak şifrelenir.
- Cüzdan parolası, private key veya seed phrase e-postayla gönderilmez.
- Kurtarma paketi tek kullanımlı ve süreli token ile sunulur.
- Presale snapshot ve finalizasyon idempotenttir.
- Token değerleri API/domain katmanında BigInt/decimal string olarak ele alınır.
- Dağıtım kampanyası kullanıcı oyun token bakiyesini clearing hesabına atomik taşır.
- Contract bulunmayan akış manuel transaction hash ve confirmation gerektirir.
- Harici signer webhook'u HMAC secret ile doğrulanır; private key uygulamaya verilmez.
- Provider, SMTP ve signer secret'ları AES-256-GCM ile şifreli ayarlarda tutulur ve panelde maskelenir.

Üretimde admin hesabı için MFA/SSO, Redis/edge rate limit, secret manager, merkezi audit ve bağımsız penetration testi eklenmelidir.
