## ARENA BATTLE — ERİŞİM VE CÜZDAN GÜVENLİĞİ / v15 R26

## Kimlik ve tek oyuncu oturumu
Operatör, `externalId` değerini kendi doğrulanmış üye oturumundan üretir. Üye kimliği, bakiye veya site kimliği tarayıcının beyanından alınmaz. `tenantId` + `externalId` aynı kalıcı Arena Battle oyuncusuna bağlanır. Aynı oyuncu aynı siteden yeni açılış yaptığında önceki oyuncu oturumu geçersizleşir. Başka sitedeki üyelik ayrı kalır. Bu kural fiziksel cihaz parmak izi değil sunucu oturumu kuralıdır; kopyalanmış aynı oturum belirtecini ayrı bir cihaz olarak ispatlamaz. [1]

## Sunucudan sunucuya API
API anahtarı yalnız operatör backend'inde tutulur. Tarayıcıya kısa ömürlü açılış bileti gönderilir. API anahtarı, cüzdan imza sırrı ve panel parolası URL'lere, istemci dosyalarına veya hata kayıtlarına yazılmaz. Canlı ortam HTTPS kullanmalıdır. İzinli origin iframe/istemci erişimini düzenler; sunucu kimlik doğrulamasının yerine geçmez. [2]

Site IP politikası mevcut sitelerde kapalı başlar; kayıtlı bir IP olmadan otomatik açılmaz. Yetkili yönetici en çok 50 IPv4, IPv6 veya CIDR tanımlar. Örnek istek gövdesi:

```json Site IP politikası
{
  "enabled": true,
  "ipAllowlist": [
    "198.51.100.8",
    "2001:db8:1::/64"
  ]
}
```

Bu adresler dokümantasyon örneğidir; kendi backend'inin sabit çıkış IP'lerini kullan. Etkin politika boş liste kabul etmez. Anahtarın IP kısıtı ile site politikası birlikte uygulanır; anahtar yetkileri ve süresi ayrıca geçerli olmalıdır. Kaydetme işlemi denetim günlüğüne işlenir.

Sağlayıcı paneli: okuma `sites.read`; güncelleme `sites.manage`, doğrulanmış yönetici oturumu ve CSRF başlığı ister.

```http Sağlayıcı paneli uçları
GET /control/api/tenants/:id/api-security
PATCH /control/api/tenants/:id/api-security
```

Operatör paneli yalnız kendi politikasını okur; değiştiremez.

```http Operatör paneli ucu
GET /operator-api/api-security
```

Oyuncunun oturumlarını operatör backend’inden launch kapsamlı sunucu anahtarıyla kapatın.

```http Sunucu API ucu
POST /provider/v1/player/:externalId/sessions/revoke
```

```json Oturum iptal gövdesi
{}
```

Varsayılan kaynak adresi gerçek bağlantının `socket.remoteAddress` değeridir. R46 ile `TRUSTED_PROXY_IPS` içinde açıkça listelenen vekiller için tek ve geçerli `X-Real-IP` değeri istek bazında doğrulanır. Liste dışı kaynaktan gelen forwarding başlıklarına güvenilmez; `X-Forwarded-For` / Forwarded zinciri yorumlanmaz. Güvenilen Nginx, `X-Real-IP` değerini kendi bağlantı kaynağıyla üzerine yazmalıdır. Backend portunu dışarıya açmayın. Anahtarın ve sitenin IP kısıtları aynı doğrulanmış adresi kullanır. Tüm operatörleri ortak proxy IP’sine izin vererek ayırt edemezsiniz. deployment/nginx.conf.example ve deployment/INSTALL-TR.txt dağıtım örnekleridir; gerçek ağda ayrıca doğrulanmalıdır. IP listesi API anahtarının ve imza doğrulamasının yerine geçmez. [3]

## Tek cüzdan ve tekrarlar
Seamless cüzdanda operatör defteri gerçek bakiyenin kaynağıdır. Tüm ürünler aynı defteri atomik güncellemelidir. Giriş rezervasyonu, iade ve sonuç işlemlerinin her biri kalıcı işlem kimliği taşır. Ağ zaman aşımında yeni kimlikle ikinci işlem oluşturma; aynı içerik/kimlikle yeniden dene. Yanıtı kaybolan ödeme önce beklemede kalır ve mutabakatla tamamlanır. Bakiye sürümü eski yanıtların güncel bakiyeyi ezmesini önler. İşlem yetkisi ve tutarlar sunucuda doğrulanır. [4,5]

İki yönde de kesin UTF-8 gövde ve zaman damgası üzerinden HMAC-SHA256 doğrulanır. Callback sırrını tarayıcıya koyma. İmzalı başarılı ve hata yanıtları, kalıcı alındı, yeniden denemede güncel bakiye, kuruş cinsinden tam sayılar ve sınırlar için SEAMLESS-WALLET.txt dosyasını uygula. IP kısıtı tek başına bir cüzdan imzası değildir.

## Panel için iki aşamalı doğrulama
Ana admin ve site panelinde doğrulayıcı uygulama ile TOTP kurulabilir. Kurulum ancak geçerli kodla onaylanınca etkinleşir; etkin hesapta parola doğrulaması tek başına oturum oluşturmaz. Altı haneli kod 30 saniyelik zaman adımı kullanır; kabul edilmiş kod tekrar kullanılamaz. Kurtarma kodlarını çevrimdışı ve güvenli sakla; her kod bir kez kullanılabilir. [6]

Bu sürümde TOTP phishing'e dayanıklı bir WebAuthn/passkey yöntemi değildir. Yönetici hesabında güçlü ayrı parola kullan, giriş alan adını doğrula ve anahtar/QR görüntüsünü paylaşma. [7] Hesapları otomatik olarak MFA'ya geçirmek yerine her yönetici ve operatör kendi doğrulayıcısını kurup doğrular.

## İşletim
Üretimde HTTPS, saat senkronizasyonu, ağ erişim kısıtı ve uygulama önünde kaynak limitleri uygula. API anahtarını asgari kapsam, son kullanma ve gerekli IP kısıtıyla üret. Anahtar yenilerken yeni anahtarı operatör backend'ine al, bağlantıyı doğrula, eskisini iptal et. Cüzdan sırrını iki uçta koordineli değiştir; belirsiz işlemleri mutabakat etmeden silme.

Veritabanı, işlem kayıtları ve data klasöründeki şifreleme anahtarlarını şifreli yedekle. Özellikle `panel-mfa-master.key` kaybolursa mevcut TOTP sırları çözülemez; yeni dosya üretmek eski anahtarın yerini tutmaz. Geri yüklemeyi ayrı ortamda dene, eski yedekten canlıya dönerken operatör defteriyle bekleyen/sonuçlanmış işlemleri mutabakat et. Yedek geri yükleme, alındıların yeniden para hareketi üretmesine yol açmamalıdır. Denetim kayıtlarını ve bekleyen ödeme yaşlarını izle.

## Kaynaklar
- [1] OWASP Session Management: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
- [2] OWASP REST Security: https://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html
- [3] 155.io entegrasyon güvenliği: https://docs.155.io/security
- [4] OWASP Transaction Authorization: https://cheatsheetseries.owasp.org/cheatsheets/Transaction_Authorization_Cheat_Sheet.html
- [5] Stripe idempotent requests: https://docs.stripe.com/api/idempotent_requests
- [6] RFC 6238 TOTP: https://datatracker.ietf.org/doc/html/rfc6238
- [7] OWASP Multifactor Authentication: https://cheatsheetseries.owasp.org/cheatsheets/Multifactor_Authentication_Cheat_Sheet.html

Kaynaklar tasarım ilkelerini destekler; bu ürün için sertifika veya üçüncü taraf denetimi değildir. Yerel muhasebe ve erişim testleri, operatörün üretim cüzdanı ve ağ kurulumunun kabul testinin yerine geçmez.
